首页 > 解决方案 > Numpy - 用索引数组索引数组的最后一个维度

问题描述

我正在尝试使用由我希望保留的索引组成的矩阵来索引 3D 矩阵的最后一个维度。

我有一个形状的推力值矩阵:

(3, 3, 5)

我想根据一些标准过滤最后一个索引,使其从大小 5 减小到大小 1。我已经在最后一个维度中找到了符合我的标准的索引:

[[0 0 1]
 [0 0 1]
 [1 4 4]]

我想要实现的目标:对于第一行和第一列,我想要最后一个维度的第 0 个索引。对于第一行和第三列,我想要最后一个维度的第一个索引。在索引方面,保持最终矩阵将变成这样的(3, 3)2D 矩阵:

[[0,0,0], [0,1,0], [0,2,1];
 [1,0,0], [1,1,0], [1,2,1];
 [2,0,1], [2,1,4], [2,2,4]]

我非常有信心 numpy 可以做到这一点,但我无法弄清楚究竟是如何做到的。我宁愿不构建带有嵌套 for 循环的构造。

我已经尝试过:

minValidPower = totalPower[:, :, tuple(indexMatrix)]

但这会产生一个(3, 3, 3, 3)矩阵,所以我不完全确定我应该如何处理这个问题。

标签: pythonarraysnumpy

解决方案


作为a输入数组和idx索引之一 -

np.take_along_axis(a,idx[...,None],axis=-1)[...,0]

或者,使用开放式网格 -

I,J = np.ogrid[:idx.shape[0],:idx.shape[1]]
out = a[I,J,idx]

推荐阅读