
学习 Numpy 的时候, Axes 是一个不容易搞懂的东西, 本文就是相关的一篇学习笔记。(原文链接在参考资料中)
例如在一个 2D array 中, 0,1 的方向分别如下
image.pngsum, 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 是将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.pngnp.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