我有一个ex 5 * 3数组,例如
[1,2,3]
[4,5,6]
[7,8,9]
[10,11,12]
[13,14,15]
我有3个列表可供选择,例如
a1 = [0,1,2]
a2 = [0,1,3]
a3 = [0,2,4]
现在我想获得3个数组,每个数组都来自a,a2和a3 同样,a1仅选择第一列,a2仅选择第二列... 对于给定的例子,我想要
[1,4,7], [2,5,11], [9,12,15]
最好的方法是什么?
谢谢。
答案 0 :(得分:1)
In [913]: arr = np.arange(1,16).reshape(5,3)
In [914]: arr
Out[914]:
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12],
[13, 14, 15]])
In [915]: idx = np.array([[0,1,2],[0,1,3],[0,2,4]])
In [916]: idx.shape
Out[916]: (3, 3)
我们要选择一个(3,3)值数组,其中idx
标识行。因此,我们需要一个随其广播的列索引。 [0,1,2]
可以。
In [917]: arr[idx, np.arange(3)]
Out[917]:
array([[ 1, 5, 9],
[ 1, 5, 12],
[ 1, 8, 15]])
糟糕,选择错误;让我们尝试移调:
In [918]: arr[idx.T, np.arange(3)]
Out[918]:
array([[ 1, 2, 3],
[ 4, 5, 9],
[ 7, 11, 15]])