【发布时间】:2016-09-15 09:07:18
【问题描述】:
我需要从数字列表中生成样本,在这种情况下,我可能需要采样比我拥有的更多的数字。更明确地说,这是我需要做的:
设我列表中的元素总数为 N。
我需要从这个列表M个样本中随机抽样而不替换。
如果 M
如果 M > N,则样本必须由 X 乘以列表中的所有 N 个数字组成,其中 X 是 N 整除 M 的次数,即 X = floor(M/N) 然后采样列表中的额外 M-(X*N) 个剩余样本,无需替换。
例如,让我的列表如下:
L = [1, 2, 3, 4, 5]
我需要采样 8 个样本。然后首先,我对完整列表进行一次采样,并随机添加 3 个元素而不进行替换,例如我的样本可能是:
Sampled_list = [1, 2, 3, 4, 5, 3, 5, 1]
如何在 Python 的计算时间方面尽可能高效地实现这样的代码?这可以在没有 for 循环的情况下完成吗?
目前我正在使用 for 循环来实现这一点,但这对于我的目的来说效率太低了。我也试过 Numpy 的 random.choice 没有替换,但我需要 M
感谢您的帮助!
【问题讨论】:
-
为什么要结束这个问题?它有什么问题?