gpt4 book ai didi

python - 通过没有循环的二维索引数组索引二维 numpy 数组

转载 作者:太空狗 更新时间:2023-10-29 20:20:15 28 4
gpt4 key购买 nike

我正在寻找一种矢量化的方式来通过索引的 numpy.arraynumpy.array 进行索引。

例如:

import numpy as np

a = np.array([[0,3,4],
[5,6,0],
[0,1,9]])

inds = np.array([[0,1],
[1,2],
[0,2]])

我想构建一个新数组,这样该数组中的每一行 (i) 都是数组 a 的一行 (i),由数组 inds(i) 的行索引。我想要的输出是:

array([[ 0.,  3.],   # a[0][:,[0,1]]
[ 6., 0.], # a[1][:,[1,2]]
[ 0., 9.]]) # a[2][:,[0,2]]

我可以用一个循环来实现:

def loop_way(my_array, my_indices):
new_array = np.empty(my_indices.shape)
for i in xrange(len(my_indices)):
new_array[i, :] = my_array[i][:, my_indices[i]]
return new_array

但我正在寻找一个纯矢量化的解决方案。

最佳答案

当使用索引数组索引另一个数组时,每个索引数组的形状应与输出 数组的形状相匹配。您希望列索引与 inds 匹配,并且您希望行索引与输出行匹配,例如:

array([[0, 0],
[1, 1],
[2, 2]])

你可以只使用上面的单个列,由于广播,所以你可以使用 np.arange(3)[:,None] 是垂直 arange 因为 None 插入了一个新轴:

>>> np.arange(3)[:, None]
array([[0],
[1],
[2]])

最后,一起:

>>> a[np.arange(3)[:,None], inds]
array([[0, 3], # a[0,[0,1]]
[6, 0], # a[1,[1,2]]
[0, 9]]) # a[2,[0,2]]

关于python - 通过没有循环的二维索引数组索引二维 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20103779/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com