val = long(raw_input("Please enter the maximum value of the range:")) + 1
start_time = time.time()
numbers = range(0, val)
shuffle(numbers)
非常に大きな入力でこれを機能させる簡単な方法が見つかりません - 誰でも助けてくれますか?
このような質問を見ましたが、シャッフルで機能する方法で説明されている範囲関数を実装できませんでした。ありがとう。
val = long(raw_input("Please enter the maximum value of the range:")) + 1
start_time = time.time()
numbers = range(0, val)
shuffle(numbers)
非常に大きな入力でこれを機能させる簡単な方法が見つかりません - 誰でも助けてくれますか?
このような質問を見ましたが、シャッフルで機能する方法で説明されている範囲関数を実装できませんでした。ありがとう。
[0, n)
メモリ効率の良い方法で範囲のランダムな順列を取得します。あなたが使用することができますnumpy.random.permutation()
:
import numpy as np
numbers = np.random.permutation(n)
たとえば、範囲k
からランダムな値を取得する場合など、範囲からの値のごく一部のみが必要な場合[0, n)
:
import random
from functools import partial
def sample(n, k):
# assume n is much larger than k
randbelow = partial(random.randrange, n)
# from random.py
result = [None] * k
selected = set()
selected_add = selected.add
for i in range(k):
j = randbelow()
while j in selected:
j = randbelow()
selected_add(j)
result[i] = j
return result
print(sample(10**100, 10))