2011-12-14 69 views
30

我的问题是:如何在numpy中生成非重复的随机数字?numpy中的非重复随机数

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

你是什么意思的“不重复”?随机数字序列不会再出现?这是不可能的,因为随机数发生器的状态需要适合计算机的有限存储器。或者你的意思是没有一个单一的号码出现两次? – 2011-12-14 13:57:38

+3

非重复意味着你有一个没有重复的列表。 – Polynomial 2011-12-14 13:58:19

+1

也许你需要一个随机排列? http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.permutation.html – cyborg 2011-12-14 14:10:34

回答

40

如果你不使用NumPy的坚持,你可以使用random.sample()从标准库:

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

随着NumPy的,你将不得不使用numpy.random.shuffle()和切片:

a = numpy.arange(20) 
numpy.random.shuffle(a) 
print a[:10] 
-2

只需生成包含数的所需范围的阵列,然后通过反复交换的随机一个与所述阵列中的第0个元素洗牌它们。这会产生一个不包含重复值的随机序列。

+1

由此产生的随机序列的另一个特性是[它并不特别随机](http://www.codinghorror .COM /博客/ 2007/12 /的-危险 - 的 - naivete.html)。 – 2011-12-14 14:04:53

43

我认为numpy.random.sample现在不能正常工作。这是我的方式:

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