2017-08-25 63 views
1

我有一個列表range(n),並且想要隨機取樣r而無需替換,即np.random.choice(n,r, replace = False)。但我想經常這樣做,是有以下命令的快捷方式:重複列表樣本

a = [np.random.choice(n,r,replace = False) for i in range(100)] 

注:nr可以是「大」,S.T. a = np.random.choice(n,(r,100), replace = True)並刪除那些有兩個相似的索引將是低效的。

回答

1

我經常用來代替迭代的np.random.choice(..., replace=False)的一招是產生2D隨機數組,然後用argsort/argpartition來獲得唯一的整數數字。

因此,argsort,這將是 -

np.random.rand(100,n).argsort(axis=1)[:,:r] 

或者,rn一個相對較小的數字,我們會用argpartition的性能提升,像這樣 -

np.argpartition(np.random.rand(100,n),r, axis=1)[:,:r]