axis的本质
axis(轴)是编程语言中常见的概念, 它的本质是数组的层级.
例如, 在Python语言中, numpy的array是一个多维(或一维)的数组:
arr = np.array(np.arange(12).reshape(3,4))
print(arr)
"""
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
"""
print(arr.shape)
"""
(3, 4)
"""
- axis=0, 表示最外层的
[]
, 相应的arr.shape[0]
为 3, 最外层数组有3个元素; - axis=1, 表示次外层的
[]
, 相应的arr.shape[1]
为 4, 这就表示, 在最外层的3个数组元素中, 每个数组元素中又有4个元素。
沿某个axis进行操作
若函数中axis=i, 则沿着第i个下标变化、其余下标都不变的方向进行操作.
以元素下标的形式表示数组arr为:
arr[0][0] arr[0][1] arr[0][2] arr[0][3]
arr[1][0] arr[1][1] arr[1][2] arr[1][3]
arr[2][0] arr[2][1] arr[2][2] arr[2][3]
print(arr)
"""
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
"""
In [16]: arr.sum(axis=0)
Out[16]: array([12, 15, 18, 21])
arr.sum(axis=0)
表示沿着第0个下标变化, 其它索引都不变的方向进行求和操作. 即
- arr[0][0] + arr[1][0] + arr[2][0] = 12
- arr[0][1] + arr[1][1] + arr[2][1] = 15
- arr[0][2] + arr[1][2] + arr[2][2] = 18
- arr[0][3] + arr[1][3] + arr[2][3] = 21
由以上结论, 可以得到二维数组中axis含义的巧记方法:
二维数组中的巧记方法(沿方向操作)
- axis=0, 表示第一个索引变变化, 第二个索引不变, 即沿纵向操作;
- axis=1, 表示第二个索引变变化, 第一个索引不变, 即沿横向操作。