我有一个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]])
我想知道怎么做。
答案 0 :(得分:2)
您需要为第一个(0 th )轴指定一个范围。
a[np.arange(len(a))[:,None], idxes]
这直观地遵循了索引操作,idxes
的第一行将索引到a
的第一行,idxes
的第二行将索引{{1 }},等等。
另外,a
数组的尺寸也需要从1D扩展到2D,因为arange
也是2D数组。
答案 1 :(得分:1)
一种有趣的方式diagonal
+ take
,diagonal
在这里确保您总是将行索引切成等于列索引项,这将返回与逐行输出一样的结果
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]])