如何在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中不重复采样? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如果 PHP 中不存在,则复制文件并创建目录 [重复]

在Python中不重复输出的排列[重复]

加速器在 Python Tkinter 中不起作用:如何修复 [重复]

如何获得许多重复的json键的第一个键? [复制]

将项目从PC迁移到其他PC后,错误在codeigniter中不推荐使用each()函数[重复]

如何在 React 状态数组中不包含重复值,如何防止数组中的值重复?