我想索引一个2D数组,以便结果数组包含第一个索引数组指定的任何行中的所有元素以及第二个索引数组指定的任何列。例如,从这开始:
In [71]: import numpy as np
In [72]: a=np.array(range(1,43)).reshape(6,7); a
Out[72]:
array([[ 1, 2, 3, 4, 5, 6, 7],
[ 8, 9, 10, 11, 12, 13, 14],
[15, 16, 17, 18, 19, 20, 21],
[22, 23, 24, 25, 26, 27, 28],
[29, 30, 31, 32, 33, 34, 35],
[36, 37, 38, 39, 40, 41, 42]])
在matlab中(但在这里使用python语法),我可以这样做:
b = a[[0,1,2,5],[0,3,4,6]]
它会给我想要的4x4阵列。但是,在python中,这给出了:
In [73]: b = a[[0,1,2,5],[0,3,4,6]]; b
Out[73]: array([ 1, 11, 19, 42])
换句话说,在matlab中,索引数组的行为与切片行为相同,而在numpy中则不然。在python中,我可以通过混合切片和索引数组的两步过程来实现这一点:
In [75]: btemp = a[:,[0,3,4,6]]; btemp
Out[75]:
array([[ 1, 4, 5, 7],
[ 8, 11, 12, 14],
[15, 18, 19, 21],
[22, 25, 26, 28],
[29, 32, 33, 35],
[36, 39, 40, 42]])
In [76]: b = btemp[[0,1,2,5],:]; b
Out[76]:
array([[ 1, 4, 5, 7],
[ 8, 11, 12, 14],
[15, 18, 19, 21],
[36, 39, 40, 42]])
这是所需的4x4阵列。一步完成它会很好,但我找不到任何办法。