对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操作1--任务一:单通道图像转三通道理解/任务二:按axis=0或axis=1或axis=2(轴)堆叠(stack)