1

簡単にするために、元の配列がランダムな数値のセットであるとしましょう。

import numpy as np
a=np.random.rand(N)

次に、この配列からサブセットをサンプリングしてシャッフルします。

b=np.array()  <------size<N

シャッフルではインデックス値を保存しないため、b は a の順序付けられていないサブセットです。

b の元のインデックスを取得する簡単な方法があるので、それらは a と同じ順序になります。たとえば、b の要素 2 が a でインデックス 4 を持っている場合、その割り当ての配列を作成します。

要素ごとにサイクルチェックを使用できますが、おそらくもっとPython的な方法があります

ありがとう

4

2 に答える 2

2

計算上最も効率的なのは、作成されたasに関連付けbられているインデックスを追跡することだと思います。ab

たとえば、 をサンプリングする代わりにa、 のインデックスをサンプリングしaます。

indices = random.sample(range(len(a)), k)   # k < N
b = a[indices]
于 2012-10-24T22:42:25.350 に答える
0

たまたまaソートされた場合は、次のことができます。

>>> from numpy import array
>>> a = array([1, 3, 4, 10, 11])
>>> b = array([11, 1, 4])
>>> a.searchsorted(b)
array([4, 0, 2])

ソートされていない場合aは、おそらく @unutbu の回答のようなものを使用することをお勧めします。

于 2012-10-25T05:47:01.680 に答える