数组的Axis

作者: Zliang_hhh | 来源:发表于2017-04-30 20:11 被阅读95次

写在前面
因为对axis的不太了解,给阅读各种代码时带来了各种困扰,因此下定决心决定解决此问题。

根据定义,维度的轴号是数组形状中该维度的索引。 它也是在索引时用于访问该维度的位置。

axis的值是按shape来的,shape=(2,2)时,axis的值有0,1,shape=(3,3,3)时,axis的值有0,1,2,

二维

假设有一个二维数组[[1,2],[3,4]]

In [1]: import numpy as np
#先上一个二维数组
In [3]: x=np.array([[1,2],[3,4]])

In [4]: x
Out[4]:
array([[1, 2],
       [3, 4]])

In [5]: x.shape
Out[5]: (2, 2)
#可以想象成把数组向下压缩(沿着列的方向),取元素之和,4=1+3,6=2+4
In [6]: x.sum(axis=0)
Out[6]: array([4, 6])
#可以想象成把数组向右压缩(沿着行的方向),取元素之和,3=1+2,7=3+4
In [7]: x.sum(axis=1)
Out[7]: array([3, 7])

三维

假设有一个三维数组


In [8]: y=np.array([[[ 0,  1,  2],
   ...:     [ 3,  4,  5],
   ...:     [ 6,  7,  8]],
   ...:    [[ 9, 10, 11],
   ...:     [12, 13, 14],
   ...:     [15, 16, 17]],
   ...:    [[18, 19, 20],
   ...:     [21, 22, 23],
   ...:     [24, 25, 26]]])

In [9]: print y
[[[ 0  1  2]
  [ 3  4  5]
  [ 6  7  8]]

 [[ 9 10 11]
  [12 13 14]
  [15 16 17]]

 [[18 19 20]
  [21 22 23]
  [24 25 26]]]
#沿着axis=0,求和
In [10]: y.sum(axis=0)
Out[10]:
array([[27, 30, 33],
       [36, 39, 42],
       [45, 48, 51]])

嗯,图很丑,将就一下,不知道要用什么绘图软件

axis=0,求和
y.sum(axis=0)就相当于把一个3*3*3的立方体向着蓝色的面压缩,变成一个3*3的数组,对应位置的元素求和,再按顺序排列。
#同理,axis=1相当于向着红色的面压缩,变成一个3*3的数组,对应位置的元素求和,再按顺序排列。
In [11]: y.sum(axis=1)
Out[11]:
array([[ 9, 12, 15],
       [36, 39, 42],
       [63, 66, 69]])
#同理,axis=2相当于向着黄色的面压缩,变成一个3*3的数组,对应位置的元素求和,再按顺序排列。
In [12]: y.sum(axis=2)
Out[12]:
array([[ 3, 12, 21],
       [30, 39, 48],
       [57, 66, 75]])

接下来就是四维了

偷个小懒,来个最简单的吧


In [10]: x=np.array([
    ...: [
    ...:     [[1,2],
    ...:     [3,4]]
    ...: ],
    ...: [
    ...:     [[5,6],
    ...:     [7,8]]
    ...: ]
    ...:
    ...: ])

In [11]: x
Out[11]:
array([[[[1, 2],
         [3, 4]]],


       [[[5, 6],
         [7, 8]]]])
In [12]: x.shape
Out[12]: (2, 1, 2, 2)

怎么理解呢,画出四维,臣妾实在是做不到呀^ _ ^,粗暴一点理解为两个三维的杂交,交。。也就是两个1*2*2的立方体叠加吧,再上一张丑图:

憋笑
In [13]: x.sum(0)
Out[13]:
array([[[ 6,  8],     
        [10, 12]]])
#压缩后是三维哦,axis=0时对应的是shape[0]
In [14]: x.sum(0).shape
Out[14]: (1, 2, 2)
#之后又可以看做是退化了,每一个二维的数组对应一个立方体的操作
In [15]: x.sum(1)  #向着蓝面(channel方向),shape[1]
Out[15]:
array([[[1, 2],
        [3, 4]],

       [[5, 6],
        [7, 8]]])

In [16]: x.sum(2)  #向着红面(column方向),shape[2]
Out[16]:
array([[[ 4,  6]],

       [[12, 14]]])

In [17]: x.sum(3)  #向着黄面方向(row方向),shape[3]
Out[17]:
array([[[ 3,  7]],

       [[11, 15]]])

四维的axis=0好像还是有点烧脑,就相当于在保持立方体的形状时,各个立方体超时空融合吧,具体的就脑补吧。

#再来一个例子吧,2个2*1*1的立方体
In [25]: y=np.array([
    ...: [[[1]],[[2]]],
    ...: [[[3]],[[4]]]
    ...: ])

In [26]: y.shape
Out[26]: (2, 2, 1, 1)

In [27]: y.sum(0)
Out[27]:
array([[[4]],

       [[6]]])

最后吐槽一下自己的丑图,愿推荐一个好用的绘图软件

相关文章

  • 数组的Axis

    写在前面因为对axis的不太了解,给阅读各种代码时带来了各种困扰,因此下定决心决定解决此问题。 根据定义,维度的轴...

  • (01)numpy学习

    创建数组对象 axis为轴,n维数组有n个轴,axis的取值为1,2,3,4...,n 1、数组属性 arr.as...

  • 理解axis参数和dot函数

    理解axis看下面的例子 多维数组的轴(axis=)是和该数组的size(或者shape)的元素是相对应的; 对于...

  • MXnet——ndarray

    在numpy和mxnet的ndaray中的数组都会出现轴的概念,axis 牢记一点:只要按照axis=1的运算或者...

  • np.expand_dims实例详细介绍

    np.expand_dims()用于扩展数组的形状 参数:values:数组axis:表示在该位置添加数据 例子:...

  • 多维数组的轴axis

    Numpy:对Axis的理解

  • numpy中axis参数说明

    axis=i,即沿着数组第i个下标的变化方向进行操作。这里我们用numpy.sum(axis=i)进行说明 举例说...

  • NumPy API(十)——输入和输出排序、搜索和计数

    排序、搜索和计数 排序 sort(a[, axis, kind, order]) 返回数组的排序副本。 lexso...

  • Numpy札记6_数组添加删除去重

    在Numpy中对数组中的元素由添加、删除、去重等操作,操作可针对行和列进行,指定行axis=0,指定列axis=1...

  • [3 Printing Arrays]NumPy

    当你print数组的时候, NumPy遵循下面的规则: 1.the last axis is printed fr...

网友评论

    本文标题:数组的Axis

    本文链接:https://www.haomeiwen.com/subject/rtextxtx.html