2011-12-14 14 views
30

質問:numpyで非繰り返し乱数を生成するにはどうすればよいですか?numpyでの非繰り返し乱数

list = np.random.random_integers(20,size=(10)) 
+0

"反復的でない"とはどういう意味ですか?乱数のシーケンスは決して繰り返されないのですか?乱数発生器の状態がコンピュータの有限メモリに収まる必要があるため、これは不可能です。または、単一の番号が2回も出現しないことを意味しますか? –

+3

繰り返しがないということは、重複のないリストがあることを意味します。 – Polynomial

+1

おそらくあなたはランダムな順列を必要としますか? http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.permutation.html – cyborg

答えて

40

あなたがnumpyのを使用して主張していない場合は、標準ライブラリからrandom.sample()を使用することができます。

a = numpy.arange(20) 
numpy.random.shuffle(a) 
print a[:10] 
+0

print random.sample(range(20)、10)はPython 2.6では動作しませんか? – Academia

+1

@ user1038382:私のために働く。 「うまくいかない」とはどういう意味ですか? –

+0

「未定義変数:ランダム」 – Academia

-2

必要な範囲の数値を含む配列を生成し、配列内の0番目の要素をランダムに入れ替えてシャッフルします。これにより、重複する値を含まないランダムなシーケンスが生成されます。

+1

結果のランダムシーケンスのもう1つの特性は、[特にランダムではありません](http://www.codinghorror .com/blog/2007/12/the-danger-of-naivete.html)。 –

+0

@SvenMarnach - しかしほとんどの目的のために、それは十分にランダムです。彼はもっとランダムにしたい場合は、ダブルランダムアプローチを使用することができます。 – Polynomial

+0

これは無意味です。 OPはライブラリー呼び出しを使用してそれを正しく行うことができます。それらは、より使いやすく、より速く実行し、カスタムバージョンよりも読みやすくなっています。正しいアルゴリズムを使用しても不利益がない場合は、おそらく「十分にランダム」なので、間違ったアルゴリズムを使用する必要がある理由は考えられません。 –

43

I:numpyので

print random.sample(range(20), 10) 

、あなたはnumpy.random.shuffle()とスライシングを使用する必要がありますnumpy.random.sampleが今は正しく動作しないと思っています。これは私の方法です:

import numpy as np 
np.random.choice(range(20), 10, replace=False) 
+10

'range(n)'(または 'arange(n)')の代わりに 'choice'の最初の引数として' n'を渡すのと同じです。 'choice(20、10、replace = False)'です。 –

関連する問題