簡體   English   中英

如何使用二維索引數組從二維數組中提取元素?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM