对numpy axis(轴)的理解

Posted mazinkaiser1991

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对numpy axis(轴)的理解相关的知识,希望对你有一定的参考价值。

之前对numpy函数中axis参数所指向的数据一直无法完全理解,但是接触过跨度的概念之后,对axis参数所指向的数据才有所理解。

以numpy.sum函数为例,初始化一个维度为2*3*4维的全一矩阵,代码如下:

arr = np.ones((2, 3, 4))

结果如下:

array([[[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]],

       [[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]]])

所谓沿着某个轴计算就是将这个轴上的所有元素进行相应计算,以numpy sum函数为例,对于axis=0的情况,就是将0轴上的元素依次相加,其他轴的元素维度保持不变,在上例中0轴上共有两个元素,分别为arr[0], arr[1],数据如下:

array([[1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.]])

对这两个元素相加,结果如下:

>>> arr[0] + arr[1]
array([[2., 2., 2., 2.],
       [2., 2., 2., 2.],
       [2., 2., 2., 2.]])

接下来用sum函数对结果进行验证。

>>> np.sum(arr, axis=0)
array([[2., 2., 2., 2.],
       [2., 2., 2., 2.],
       [2., 2., 2., 2.]])

结果完全相同。

利用同样的方法对axis=1进行验证,沿着1轴进行计算,实际进行的是0轴保持维度不变,1轴的对应元素进行计算。以上例就是arr[0][0] + arr[0][1] + arr[0][2], arr[1][0] + arr[1][1] + arr[1][2]两个结果。

还是先用具体元素进行验证:

>>> arr[0][0] + arr[0][1] + arr[0][2]
array([3., 3., 3., 3.])
>>> arr[1][0] + arr[1][1] + arr[1][2]
array([3., 3., 3., 3.])

再用sum进行验证

>>> np.sum(arr, axis=1)
array([[3., 3., 3., 3.],
       [3., 3., 3., 3.]])

结果还是完全相同,对于axis=2一样可以得到相同的结果。

总结:numpy函数的axis不能简单的理解为轴0是行,轴1是列。而应该理解为沿着某个轴,就是对对应维度的元素进行计算,其他维度的元素保持不变。

以上是关于对numpy axis(轴)的理解的主要内容,如果未能解决你的问题,请参考以下文章

关于NumPy中数组轴的理解

numpy操作1--任务一:单通道图像转三通道理解/任务二:按axis=0或axis=1或axis=2(轴)堆叠(stack)

What does axis/axes mean in Numpy

numpy 学习 第2篇:ndarray 基础操作

numpy中rollaxis()的理解

python 对axis的理解