【问题标题】:How do I extract elements from a 2D array using a 2D array of indices?如何使用二维索引数组从二维数组中提取元素?
【发布时间】:2021-05-17 13:39:36
【问题描述】:

我正在尝试从二维数组 a 中提取元素,并且我正在使用一个二维索引数组 b ,表示 x/y 坐标。我发现一维数组有类似的东西,但我无法成功地将它应用到二维数组:Python - How to extract elements from an array based on an array of indices?

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]

【问题讨论】:

标签: python arrays numpy indexing


【解决方案1】:

不久前我也遇到过同样的问题,答案其实很简单:

result = a[b[:,0], b[:,1]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 2020-06-30
    • 2020-07-30
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 2021-02-03
    相关资源
    最近更新 更多