美文网首页程序员
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