3

numpy に 2 つの配列があります。1 つ目は 2 次元配列で、ベクトルのリストと考えることができます。2 番目は 1 次元配列で、2 次元配列へのインデックスのリストと考えることができます。

1 次元配列のインデックスを使用して 2 次元配列の要素を選択したい。今、私はやっています

        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でこれを行うより良い方法はありますか?

4

1 に答える 1

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]]
于 2012-08-31T13:28:41.977 に答える