我有两个numpy数组。第一个是2d数组,可以将其视为向量列表。第二个是1d数组,可以将其视为2d数组中的索引列表。
我想使用1d数组的索引选择2d数组的元素。现在我一直在做
z=rnd.rand(2,10) # a list of 2d vectors of length 10
z_idx=rnd.randint(2,size=z.shape[1]) #indices selecting a dimension of the 2d vector
result=np.array([z[z_idx[i],i] for i in xrange(len(z_idx))])
但这很慢。
在numpy中有更好的方法吗?
答案 0 :(得分:5)
可能是最简单的方法:
result = z[z_idx].diagonal()
使用arange
可能会更有效率:
result = z[z_idx, np.arange(z_idx.size)]
更合适但等效的是np.indices
:
result = z[z_idx, np.indices(z_idx.shape)[0]]