我有一个列表range(n)
,想要随机抽取r
而不替换,即np.random.choice(n,r, replace = False)
。但是我想经常这样做,有以下命令的快速方法:
a = [np.random.choice(n,r,replace = False) for i in range(100)]
注意:n
和r
可以是“大”,s.t。 a = np.random.choice(n,(r,100), replace = True)
并删除具有两个相似索引的那些将是低效的。
答案 0 :(得分:1)
我经常用来替换np.random.choice(..., replace=False)
迭代的一个技巧是生成2D
个随机数组,然后使用argsort/argpartition
获取唯一的整数数。
因此,对于argsort
,它将是 -
np.random.rand(100,n).argsort(axis=1)[:,:r]
或者,由于r
的数字相对小于n
,我们会使用argpartition
来提升效果,就像这样 -
np.argpartition(np.random.rand(100,n),r, axis=1)[:,:r]