在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代碼做這項工作完美:
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)
然而,因爲它是Python的,它可能需要很長(如超過一分鐘)爲np > 200000
。
您是否可以使用NumPy
查看上述解決方案的更高效版本?
創建範圍的密集表示(np.arange(1,N + 1)),並使用np.random.choice()無需替換,或洗牌並取前n個值。這些方法是一種時間記憶折衷。 – sascha
@sascha,在評論中提出答案的意義何在? – user2699
@ user2699簡單的問題,簡單的答案。沒有時間添加完整的高質量答案,但有足夠的雄心壯志,不能給出一些衝突的低質量答案(例如,沒有假設,基準和合作的一行代碼)。因此概述了一種方法來提供幫助。 – sascha