代码之家  ›  专栏  ›  技术社区  ›  Jürg Merlin Spaak

从列表中重复抽取样本

  •  1
  • Jürg Merlin Spaak  · 技术社区  · 7 年前

    我有一份清单 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 a = np.random.choice(n,(r,100), replace = True) 删除具有两个相似索引的索引将效率低下。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Divakar    7 年前

    我经常使用一个技巧来替换 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]