我有一個 2D numpy 陣列,我想從中提取多組行/列。
# img is 2D array
img = np.arange(25).reshape(5,5)
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
我知道提取一組行/列的語法。下面將提取前4行和第3、4列如下圖
img[0:4, 2:4]
array([[ 2, 3],
[ 7, 8],
[12, 13],
[17, 18]])
但是,如果我想提取多組行和/或列,語法是什么?我嘗試了以下但它導致invalid syntax錯誤
img[[0,2:4],2]
我從上述命令中尋找的輸出是
array([[ 2],
[12],
[17]])
我嘗試搜索它,但它只會導致一組行/列的結果或提取我知道如何執行的離散行/列,例如使用 np.ix。
對于背景關系,我實際處理的二維陣列的尺寸約為 800X1200,并且我想從這個陣列中一次性提取多個范圍的行和列。所以像img[[0:100, 120:210, 400, 500:600], [1:450, 500:550, 600, 700:950]].
uj5u.com熱心網友回復:
IIUC,您可以使用numpy.r_從切片生成索引:
img[np.r_[0,2:4][:,None],2]
輸出:
array([[ 2],
[12],
[17]])
中間體:
np.r_[0,2:4]
# array([0, 2, 3])
np.r_[0,2:4][:,None] # variant: np.c_[np.r_[0,2:4]]
# array([[0],
# [2],
# [3]])
uj5u.com熱心網友回復:
您可以使用以下命令創建切片numpy.r_:
np.r_[0:2, 4]
# array([0,1,4])
然后你可以得到具體的行和列如下:
rows = np.r_[0:2, 4]
cols = np.r_[0, 2:4]
img[rows][:, cols]
# array([[ 0, 2, 3],
# [ 5, 7, 8],
# [20, 22, 23]])
uj5u.com熱心網友回復:
最簡單的方法是將索引創建為串列,然后使用串列切片:
i_list = [0,2,3]
img[i_list,2]
輸出:
array([ 2, 12, 17])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/473655.html
上一篇:計算特定范圍內的出現次數
