假设我有一个2D的numpy数组,比如4x3:
myarray = np.array([[0,1,2],
[3,4,5],
[6,7,8],
[9,10,11]])
我有一个对应于第二维的索引列表,长度为4,值的范围从0到2,即对于4行中的每一行,我有一个不同的索引,对应于我想从该行中选择的值:
idx = [0,2,1,2]
我如何将这个索引列表传递给2D数组,并得到以下长度为4的1D数组,其中每个元素对应于原始数组每行的索引值?
array([ 0, 5, 7, 11])
我正在寻找一个解决方案,不需要循环,因为我打算这样做非常大的数组。
2条答案
按热度按时间au9on6nz1#
你应该使用zip同时迭代两个数组。
ztyzrc3y2#
为了简单起见,我将尺寸减少到2x2,以使示例更容易显示。
假设我们有一个二维数组:
和一个一维索引数组:
在您的例子中,2D数组的dims为1000 x40,1D数组的索引dims为1000。
1.将索引转换为形状为1000 x1的2D数组
1.根据1D向量idx,使用以下命令选择每行中索引处的元素
np.arange(arr.shape[0])[:,None]
只是为2D数组中的所有行生成一个选择器。您的输出将如下所示。
希望这是有帮助的!