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]])
以上。
歡迎關注公眾號: