[英]How do I extract elements from a 2D array using a 2D array of indices?
我正在嘗試從二維數組a
中提取元素,並且我正在使用一個二維索引數組b
,表示 x/y 坐標。 我發現一維數組有類似的東西,但我無法成功地將其應用於二維數組: Python - 如何根據索引數組從數組中提取元素?
a = np.random.randn(10,7)
a = a.astype(int)
b = np.array([[1, 2], [2,3], [3,5], [2,7], [5,6]])
我一直在使用下面的代碼,但是它返回一個 3D 矩陣,其中包含來自每個索引的行的值:
result2 = np.array(a)[b]
result2
Out[101]:
array([[[ 0, -1, 0, 0, 0, 1, 0],
[ 0, -1, 0, 0, 0, 0, 0]],
[[ 0, -1, 0, 0, 0, 0, 0],
[-1, 0, 0, 1, 0, 0, 0]],
[[-1, 0, 0, 1, 0, 0, 0],
[ 0, 0, -1, -2, 1, 0, 0]],
[[ 0, -1, 0, 0, 0, 0, 0],
[-1, 0, 0, 0, 0, 0, 1]],
[[ 0, 0, -1, -2, 1, 0, 0],
[ 1, 0, 0, 1, 0, -1, 0]]])
如何修改b
以索引(第 1 列,第 2 行)...(第 2 列,第 3 行)...(第 3 列,第 5 行)...等?
...
這是一個最小的可重現示例,我的實際數據涉及我在 100x100 矩陣中索引 500 個單元格(使用 x/y 坐標/索引數組,大小 (500x2),類似於上面的b
)。 在這種情況下最好使用 for 循環嗎? 類似於...的東西
for i in b:
for j in b:
result2 = np.array(a)[i,j]
不久前我也遇到過同樣的問題,答案其實很簡單:
result = a[b[:,0], b[:,1]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.