NumPy 数组索引、维度增加、拼接

2021-03-01 19:28

阅读:576

标签:ping   error   imp   http   bbb   data-   index   图片   mis   

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]])

 

以上。

 

 

欢迎关注公众号:

技术图片

NumPy 数组索引、维度增加、拼接

标签:ping   error   imp   http   bbb   data-   index   图片   mis   

原文地址:https://www.cnblogs.com/xiaoheizi-12345/p/14425771.html


评论


亲,登录后才可以留言!