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]])
以上。
欢迎关注公众号: