如何使用两个索引数组扩展numpy数组

时间:2019-04-02 03:28:51

标签: python arrays numpy

我有一个numpy矩阵,例如:

a = np.array([[1, 2], [3, 4]])

然后,我想使用另一个带有索引的numpy矩阵来扩展矩阵,例如:

idxes = np.array(([0, 1, 0], [1, 0, 1]]) # the indexes matrix

操作类似于:

result = a[:, idxes] # this is an wrong expression

我期望的结果是:

>>result
array([[1, 2, 1],
       [4, 3, 4]])

我想知道怎么做。

2 个答案:

答案 0 :(得分:2)

您需要为第一个(0 th )轴指定一个范围。

a[np.arange(len(a))[:,None], idxes]

这直观地遵循了索引操作,idxes的第一行将索引到a的第一行,idxes的第二行将索引{{1 }},等等。

另外,a数组的尺寸也需要从1D扩展到2D,因为arange也是2D数组。

答案 1 :(得分:1)

一种有趣的方式diagonal + takediagonal在这里确保您总是将行索引切成等于列索引项,这将返回与逐行输出一样的结果

np.diagonal(np.take(a, idxes,1)).T
array([[1, 2, 1],
       [4, 3, 4]])

np.diagonal(a[:,idxes]).T
array([[1, 2, 1],
       [4, 3, 4]])