学习 Numpy 的时候, Axes 是一个不容易搞懂的东西, 本文就是相关的一篇学习笔记。(原文链接在参考资料中)
在 Numpy 中 Aexs 是沿着那个方向去看数据
例如在一个 2D array 中, 0,1 的方向分别如下
image.png在不同的numpy 函数中要看清楚函数说明, 才能正确运用 axis
Aggregation
sum, mean, std 之类的函数, 会沿着 Axes "坍缩", 这些函数会使得整个结构降维。
print(np_array_2d)
[[0 1 2]
[3 4 5]]
np.sum(np_array_2d, axis = 0)
array([3, 5, 7])
上面这个例子中, sum 会沿着 axis 0 的方向,进行求和, 结束后,真个数据结构维度就会下降成1维。
image.pngConcatenate
Concatenate 是将2个数据结构进行 “堆叠”, 是 “坍缩”的逆过程。 axis 是指明了 “堆叠”的方向。
array([[1, 1, 1],
[1, 1, 1]])
array([[9, 9, 9],
[9, 9, 9]])
np.concatenate([np_array_1s, np_array_9s], axis = 0)
array([[1, 1, 1],
[1, 1, 1],
[9, 9, 9],
[9, 9, 9]])
上面这个例子, 是将2个数据结构, 沿着 axis=0 的方向进行堆叠。
image.png一维数组只有 axis =0
np.concatenate([np_array_1s_1dim, np_array_9s_1dim], axis = 1)
高维数组
对于高维数组很难有直观的想象 ,这里给个例子
x = np.array((((1,2), (3,4) ), ((5,6),(7,8))))
array([[[1, 2],
[3, 4]],
[[5, 6],
[7, 8]]])
x.sum(axis=0)
array([[ 6, 8],
[10, 12]])
x.sum(axis=1)
array([[ 4, 6],
[12, 14]])
x.sum(axis=2)
array([[ 3, 7],
[11, 15]])
网上有图, 给出了三维数组中的 axis
image.png规律
这个是我个人总结的规律, 没有经过验证:
不管数据是几维的, 其存储在内存中肯定是一维的。axis 值越高,其覆盖范围越小, axis 值越低,其覆盖范围越大。 可以理解成 axis0 是一级目录, axis 是一级目录中的二级目录, 依次类推, 用图形表达如下:
image.png图中 axis 0 跨度是64 bytes, 而 axis 1 只是有32 byte; 每个 axis 0 包含了2个axis 1方向的子数据。
参考资料
[1] numpy axes explained
[2] Stack Overflow: axis in a multidimensional numpy-array
网友评论