これをスピードアップしたい:
import random
ndim = 50000
for i in xrange(ndim):
random.sample([j for j in xrange(ndim) if j != i], 30000)
NumPy を使用することを考えていますが、方法がわかりません。
これをスピードアップしたい:
import random
ndim = 50000
for i in xrange(ndim):
random.sample([j for j in xrange(ndim) if j != i], 30000)
NumPy を使用することを考えていますが、方法がわかりません。
NumPy ドキュメントから-
numpy.random.sample(サイズ=なし)
半開間隔 [0.0, 1.0) でランダムな浮動小数点数を返します。
>>> np.random.random_sample()
0.47108547995356098
>>> np.random.random_sample((5,))
array([ 0.30220482, 0.86820401, 0.1654503 , 0.11659149, 0.54323428])
したがって、あなたndim = 50000
の場合、上からランダムなサンプルを取得し、それを掛けてndim
整数に丸めることができます。これはうまくいくかもしれません...
NumPy を使用した可能な解決策は次のとおりです。
import numpy as np
from numpy.random import randint
ndim = 50000
mndim = ndim -1
base = np.arange(1, ndim)
# addr = np.ones(mndim, dtype=int)
# addr[0] = 0
for i in xrange(5000):
base[randint(0, mndim, 30000)]
try:
base[i] = i
except IndexError:
pass
x
使用された後、次のラウンドのために更新される許可された値のリストを使用します。
import random
s = 3000
ndim = 5000
x = range(1, ndim)
for i in xrange(ndim):
random.sample(x, s)
if(i < ndim - 1): x[i] = i #update