zoukankan      html  css  js  c++  java
  • 对Numpy数组按axis运算的理解

    Python的Numpy数组运算中,有时会出现按axis进行运算的情况,如

    >>> x = np.array([[1, 1], [2, 2]])
    >>> x
    array([[1, 1],
           [2, 2]])
    >>> x.sum(axis=0)%x.sum(axis=1)

    自己初学时,容易搞混axis=0到底代表的是按行运算还是按列运算,而且这仅是针对二维数组情况,更高维数组就无法仅仅用行列来区分了。
    经过自己的研究和实践后,谈一下自己的理解,读者如有不赞同的地方,欢迎交流探讨。


    numpy数组按axis 运算时,参数axis 代表的是数组的维数序号,如x.sum(axis=0) 代表按第一维(对于二维数组即按列)求和,x.sum(axis=1 代表按第二维(对于二维数组即按行)求和。
    这里的第一维、第二维如何去理解?我的理解是看numpy数组中[] 的嵌套关系。第一维就是最外层的[] ,第二维则是次外层的[],高于二维情形依次类推。下面用实际代码说明。

    %二维情形
    >>> x = np.array([[1, 1], [2, 2]])
    >>> x
    array([[1, 1],
           [2, 2]])
    >>> x.sum(axis=0)   # columns (first dimension)
    array([3, 3])
    >>> x[:, 0].sum(), x[:, 1].sum()
    (3, 3)
    >>> x.sum(axis=1)   # rows (second dimension)
    array([2, 4])
    >>> x[0, :].sum(), x[1, :].sum()
    (2, 4)
    %三维情形
    >>> x=np.arange(1,9).reshape(2,2,2);x
    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]])
    >>> x.sum(axis=2)[0,1] %上面矩阵中第一行第二个元素
    7
  • 相关阅读:
    java(JDBC连接数据库)[完整版封装]
    java(JDBC连接数据库)[对Statement进行封装]
    HTML基础(DTD & 注释 &常见HTML编码)
    HTML基础(基本结构)
    HTML基础(格式标签)
    java(安全方便的从控制台读入数据)[对Scanner类进行封装,用正则表达式判断]
    java(JDBC连接数据库)[对PreparedStatement进行封装]
    for循环
    什么是操作系统
    字符串内置方法
  • 原文地址:https://www.cnblogs.com/yidashi110/p/10413464.html
Copyright © 2011-2022 走看看