n = range(1, n+1)
の範囲内で、n * p
の一意の整数のリストをランダムに生成する必要があります。例えばNumPy - 範囲内の一意の整数のランダムリストを選択する
n = 10
とp = 0.3
場合は、可能な結果があることができます:
[2, 6, 9]
[1, 5, 7]
[3, 4, 8]
[3, 5, 6]
etc
次のPythonコードは完璧に仕事をしていません:それはPythonのだからしかし、それは(長く取ることができます
import random
n = 250000
p = 0.8
np = int(n * p)
result = []
for i in range(np):
attempt = random.randint(1, n)
if attempt not in result:
result.append(attempt)
1分以上)をnp > 200000
に設定します。
NumPy
を使用して、上記のソリューションのより効率的なバージョンを確認できますか?
へ
リンク(あなたの範囲(np.arange(1、N + 1))の密な表現を作成し、np.random.choiceを使用)交換しないでシャッフルして、最初のnの値を取る。これらのアプローチは、一種の時間 - メモリトレードオフです。 – sascha
@サシャ、コメントに答えを入れるのは何ですか? – user2699
@ user2699簡単な質問、簡単な答え。高品質の完全な回答を追加する時間はありませんが、急いで低品質の回答(例えば、仮定、ベンチマーク、共同のない1行のコード)を与えないように十分に意欲的です。したがって、手助けのアプローチの概要。 – sascha