2017-08-25 12 views
1

私はリストrange(n)を持っており、np.random.choice(n,r, replace = False)のような無置き換えrのランダムサンプルを取りたいと思っています。リストのサンプルを繰り返し取る

a = [np.random.choice(n,r,replace = False) for i in range(100)] 

注:nrが「大」することができ、S。T.しかし、私は頻繁にこれをしたい、次のコマンドのための高速な方法がありますa = np.random.choice(n,(r,100), replace = True)と同様の2つのインデックスを持つものを削除すると効率が悪くなります。

答えて

1

私はしばしばnp.random.choice(..., replace=False)の反復を置き換えるために使用したトリックは、2D乱数の配列を生成し、argsort/argpartitionを使用して一意の整数値を取得しています。

したがって、argsortと、それは次のようになり - rnよりも相対的に少ない数であると、また

np.random.rand(100,n).argsort(axis=1)[:,:r] 

、我々は、パフォーマンスの向上のためにargpartitionを使用しますので、のような -

np.argpartition(np.random.rand(100,n),r, axis=1)[:,:r] 
関連する問題