如何使用索引的2D数组从2D数组中提取元素



我正在尝试从二维数组a中提取元素,并且我正在使用表示x/y坐标的二维索引数组b。我为1D数组找到了类似的东西,但我无法成功地将其应用于2D数组: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]]

最新更新