使用ndy中的1d数组从2d数组中选择多个元素

时间:2012-08-31 13:19:10

标签: python arrays numpy

我有两个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中有更好的方法吗?

1 个答案:

答案 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]]