zoukankan      html  css  js  c++  java
  • NumPy 数组索引、维度增加、拼接

    NumPy(Numerical Python)是Python中科学计算的核心库,支持大量的维度数组与矩阵运算,在数组处理上功能真的很强,在Python中调用numpy进行数组相关计算就很方便。

    看图像处理相关代码的时候常常会遇到一些numpy相关语法,简洁高效,看不懂就影响阅读的质量与速度,这篇文章帮助解决和记录常遇到的一些基于numpy的数组数据变换问题。

    numpy中数组索引问题:

    单维整数索引
    >>> import numpy as np
    >>>aaa = np.array(range(1,10))
    array([1, 2, 3, 4, 5, 6, 7, 8, 9])
    
    >>> aaa[1:5:2]
    array([2, 4])
    >>> aaa.reshape((3,-1))
    array([[1, 2, 3],
           [4, 5, 6],
           [7, 8, 9]])
    >>> aaa.reshape((3,-1))[0:2:2]
    array([[1, 2, 3]])
    #以整数作为索引,以[起始索引:终止索引:步长] 为格式索引,步长为1时可省略步长
    
    单维数组索引
    >>> aaa[[0]]
    array([1])
    >>> aaa[[0,2]]
    array([1, 3])
    >>> aaa.reshape((3,-1))
    array([[1, 2, 3],
           [4, 5, 6],
           [7, 8, 9]])
    >>> aaa.reshape((3,-1))[[0,2]]
    array([[1, 2, 3],
           [7, 8, 9]])
    >>>aaa.reshape((3,-1))[[0,0,1,2,2,0,1]]
    array([[1, 2, 3],
           [1, 2, 3],
           [4, 5, 6],
           [7, 8, 9],
           [7, 8, 9],
           [1, 2, 3],
           [4, 5, 6]])
     # 已知数组a、b,使用a[b]进行索引,数组b中的值是a中元素所在的索引,b中元素个数可以超过a中元素个数。
     
     多维整数索引
    >>> aaa.reshape((3,1,-1))
    array([[[1, 2, 3]],
           [[4, 5, 6]],
           [[7, 8, 9]]])
    
    >>> aaa.reshape((3,1,-1))[0,0]
    array([1, 2, 3])
    >>>aaa.reshape((3,1,-1))[2,0,0:2]
    array([7, 8])
    # 索引之间用冒号是在同一维度上取值,用逗号是在不同维度上取值
    
    多维数组索引
    >>> aaa.reshape((3,1,-1))
      array([[[1, 2, 3]],
           [[4, 5, 6]],
           [[7, 8, 9]]])
    >>> aaa.reshape((3,1,-1))[[0,0,2],[0]]
    array([[1, 2, 3],
           [1, 2, 3],
           [7, 8, 9]])
    >>>aaa.reshape((3,1,-1))[[0,0,2],[0,0]]
    IndexError: shape mismatch:
    >>>aaa.reshape((3,1,-1))[[0,0,2],[0],[1]]
    array([2, 2, 8])
    >>>aaa.reshape((3,1,-1))[[0,0,2],[0],[1,0]]
    IndexError: shape mismatch:
    >>>aaa.reshape((3,1,-1))[[0,0,2],[0],[1,0,0]]
    array([2, 1, 7])
    >>>aaa.reshape((3,1,-1))[[0,0,2],[0],[1]]
    array([2, 2, 8])
    
    >>> aaa.reshape((3,1,-1))[[0,2]]
    array([[[1, 2, 3]],
           [[7, 8, 9]]])
    >>> aaa.reshape((3,1,-1))[[0,2],[0]]
    array([[1, 2, 3],
           [7, 8, 9]])
    >>> aaa.reshape((3,1,-1))[[0,2],[0,0]]
    array([[1, 2, 3],
           [7, 8, 9]])
    >>>aaa.reshape((3,1,-1))[[0,2],[0,0],[0]]
    array([1, 7])
    >>>aaa.reshape((3,1,-1))[[0,2],[0,0],[0,1]]
    array([1, 8])
    # 多个数组当索引,可以在第一个数组中以目标所在索引取出多个索引目标,之后的索引数组要在第一个数组取出的结果上操作 

    总结如下表:

    numpy数组维度增加:

    数组增加可以使用np.newaxis()函数 和 添加None方法

    >>> import numpy as np
    >>> aaa = np.array(range(1,10))
    array([1, 2, 3, 4, 5, 6, 7, 8, 9])
    >>>bbb = aaa[2, None]
    >>>bbb
    array([3])
    >>>ccc = aaa[2,np.newaxis]
    >>>ccc
    array([3])

    numpy数组拼接:

    常用的还是np.concatenate()

    接上一段变量使用

    >>>np.concatenate((bbb,ccc),0)
    array([3, 3])
    >>>np.concatenate((bbb,ccc),1)
    numpy.AxisError: axis 1 is out of bounds for array of dimension 1
    >>>np.concatenate((bbb[...,None],ccc[...,None]),1)
    array([[3, 3]])

    以上。

    欢迎关注公众号:

  • 相关阅读:
    如何重启apache2服务
    ubuntu设置不睡眠的方法
    linux环境下安装varnish
    PHP 开发者该知道的 5 个 Composer 小技巧
    dl, dt, dd /line-height /loat /vertical-align 问题
    针对老式浏览器(主要是IE6、7、8)的css3-mediaqueries.js自适应布局
    三栏网页宽度自适应布局方法
    vue.js开发环境搭建
    vue.js之个人总结
    less学习:基础语法总结
  • 原文地址:https://www.cnblogs.com/xiaoheizi-12345/p/14425771.html
Copyright © 2011-2022 走看看