python---之轴,axis的理解

  轴这个概念可以说是我第一次看到这个概念,在学习线性代数的时候,貌似也没有听过(大雾)。理解numpy中的轴的概念对我们接下来理解numpy中的转置transpose有着至关重要的作用。
  如果我们直接说轴这个概念,童鞋们可能会比较迷茫,我们先来说一个和它非常相似的概念—坐标轴。n 维空间里有 n 个坐标轴,并且坐标轴互相垂直,每一个点相对于一条坐标轴都有唯一的一个坐标值。对同一条坐标轴来说,坐标值相同的点在同一个 n-1 维的“平面”上。任意取一个“平面”,我们就能定义“同一个坐标轴上的点”,这些点在“平面”上的投影相同,同一个坐标轴上的点组成的线是与坐标轴平行的。而所谓的延轴计算实际上是降维的过程,同一个坐标轴上的点合并成一个点,这样n维空间就变成了 n-1 维空间。如果童鞋们还不理解,这里引用一个别的博文中常提到的另外一个解释。来看下例子

>> data2
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]]])
>> data2.shape
(2L, 3L, 4L)
  •  

  这里会常常提到这样的一个例子,这个数组我们该如何称呼它呢?2行3列4个平面。这其实就和我们上面所描述的坐标轴的概念十分的接近。如果你喜欢这样的说法也是可以的。
  看完了坐标轴,下面我们来说说轴,如果还是有些问题的童鞋可以参考一下下面的理解。要理解它,我们可以先使用一下它,并且观察一下它是如何进行操作的。我们用最简单的累加来进行一下操作。代码如下
  

data2.sum(axis=0)
Out[49]: 
array([[12, 14, 16, 18],
       [20, 22, 24, 26],
       [28, 30, 32, 34]])

data2
Out[50]: 
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]]])

data2.sum(axis=1)
Out[51]: 
array([[12, 15, 18, 21],
       [48, 51, 54, 57]])

data2.sum(axis=2)
Out[52]: 
array([[ 6, 22, 38],
       [54, 70, 86]])
  •  

  如果你还是懵逼的,那么我们来参考一下下面的图。
  这里写图片描述
  红线框代表的是以轴为0相加的情况,而黄线则是轴为1,蓝线自不必多说就是轴为2的情况。
  具体到 numpy 中的多维数组来说,轴即是元素坐标的索引。比如,第0轴即是第1个索引,延0轴计算就是去掉坐标中的第一个索引。过程就是
1.遍历其他索引的所有可能组合
2. 取出一个组合,保持值不变,遍历第一个索引所有可能值
3.根据索引可以获得了同一个轴上的所有元素
4.对他们进行计算得到最后的元素
5.所有组合的最后结果组到一起就是最后的 n-1 维数组
所以如果一个多维数组的 shape 是 (a1, a2, a3, a4), 那么延轴0计算最后的数组shape 是 (a2, a3, a4), 延轴1计算最后的数组shape是 (a1, a3, a4)。

注:axis =0还是代表shape0,只不过axis=0的一些计算如,np.sum(axis=0)是沿着这个轴计算其他轴的,也就是除了这个轴以外其他轴都会计算

转载:https://blog.csdn.net/Exziro/article/details/78152621

猜你喜欢

转载自blog.csdn.net/zxyhhjs2017/article/details/81428220
今日推荐