重复列表的样本

时间:2017-08-25 12:33:34

标签: python numpy random

我有一个列表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 个答案:

答案 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]