美文网首页程序员
Numpy Axes/Axis 介绍

Numpy Axes/Axis 介绍

作者: 数科每日 | 来源:发表于2020-12-30 11:36 被阅读0次

学习 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.png
Concatenate

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

相关文章

网友评论

    本文标题:Numpy Axes/Axis 介绍

    本文链接:https://www.haomeiwen.com/subject/glacoktx.html