Aca*_*mia 56 random numbers numpy non-repetitive
我的问题是:如何在numpy中生成非重复的随机数?
list = np.random.random_integers(20,size=(10))
Run Code Online (Sandbox Code Playgroud)
小智 83
我认为numpy.random.sample
现在不行.这是我的方式:
import numpy as np
np.random.choice(range(20), 10, replace=False)
Run Code Online (Sandbox Code Playgroud)
Sve*_*ach 72
如果您不坚持使用NumPy,您可以使用random.sample()
标准库:
print random.sample(range(20), 10)
Run Code Online (Sandbox Code Playgroud)
使用NumPy,您将不得不使用numpy.random.shuffle()
和切片:
a = numpy.arange(20)
numpy.random.shuffle(a)
print a[:10]
Run Code Online (Sandbox Code Playgroud)
几年后,有时需要从 10000^2\n 中选择 40000 个(Numpy 1.8.1,imac 2.7 GHz):
\n\nimport random\nimport numpy as np\n\nn = 10000\nk = 4\nnp.random.seed( 0 )\n\n%timeit np.random.choice( n**2, k * n, replace=True ) # 536 \xc2\xb5s \xc2\xb1 1.58 \xc2\xb5s\n%timeit np.random.choice( n**2, k * n, replace=False ) # 6.1 s \xc2\xb1 9.91 ms\n\n# https://docs.scipy.org/doc/numpy/reference/random/index.html\nrandomstate = np.random.default_rng( 0 )\n%timeit randomstate.choice( n**2, k * n, replace=False, shuffle=False ) # 766 \xc2\xb5s \xc2\xb1 2.18 \xc2\xb5s\n%timeit randomstate.choice( n**2, k * n, replace=False, shuffle=True ) # 1.05 ms \xc2\xb1 1.41 \xc2\xb5s\n\n%timeit random.sample( range( n**2 ), k * n ) # 47.3 ms \xc2\xb1 134 \xc2\xb5s\n
Run Code Online (Sandbox Code Playgroud)\n\n(为什么要从 10000^2 中选择 40000 个?\n要生成大型\n scipy.sparse.random \n矩阵 - scipy 1.4.1 使用np.random.choice( replace=False )
,slooooow。)
向 numpy.random 的人们致敬。
\n