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

 

以上。

 

 

歡迎關注公眾號:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM