如何在python中不重复采样? [复制]
Posted
技术标签:
【中文标题】如何在python中不重复采样? [复制]【英文标题】:How to sample without duplication in python? [duplicate] 【发布时间】:2021-12-08 13:57:22 【问题描述】:我想在长度为 100 的 list
中采样 30 个样本。
我可以像这样使用 np.random.sample:
import numpy as np
l = list(range(100))
np.random.choice(l, 30)
# np.random.choice(l, 30) may be same with next time np.random.choice(l, 30)
这样可以得到一个样本组,但是我需要多采样几次。
例如,我需要长度为 10 的列表中的 3 个子列表(长度=3)(只是一个演示)。
重复的样本对我来说毫无意义。这意味着 [1,2,3] 和 [3,2,1] 对我来说是重复的。但np.random.choice
可能会为我生产两个。
python中有什么方法可以帮助我吗?或者有什么方法可以更快地比较采样列表?
【问题讨论】:
combination
的内存开销怎么会太高?它是一个发电机......
您需要采样多少次?如果您想多次采样而不重复,那么您需要记住您采样的内容。仅采样一次是最有效的方法,因此请尝试重新考虑该要求并重新设计您的代码。
@Tranbi 组合是一个生成器,但我需要对其进行 random.sample,这意味着我需要将其列出,生成器不能被采样,我想?
如果您只有 100 个号码,并且每个样品消耗 30 个号码,如果您采样超过 3 次,您将消耗所有号码(因为顺序对您来说并不重要)。我不明白您所说的“多次采样(可能非常大,比如 10000)”是什么意思。
知道了。您是否已经检查了以下内容? ***.com/questions/36779729/…
【参考方案1】:
如果您的列表只有 100 个元素,您可以random.shuffle
并获取前 30 个元素。
import random
l = list(range(100))
random.shuffle(l)
print(l[:30])
【讨论】:
好主意,但我认为它会产生重复的样本?因为随机播放可能相同。 @nick,如果原始列表没有重复元素,则不会(如果有,将其转换为集合并将它们转换回列表以摆脱它们)。请注意,我没有洗牌并获得第一个元素,它们再次洗牌。你洗牌一次,得到洗牌列表的前 30 个元素。 @nick 是的,如果你想多次这样做,那么它会有重复。但是你想采样多少次,每个样本需要多少元素?请在问题中说明。 这个样本操作我需要做很多次,关于重复,我的意思是,前30个样本可能与我后面的样本相同 @TedKleinBergman 谢谢,我会添加信息以上是关于如何在python中不重复采样? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
加速器在 Python Tkinter 中不起作用:如何修复 [重复]