python - 从 python 中具有固定数量元素的集合中进行非常快速的采样

标签 python performance random numpy random-access

我需要从固定大小的集合中随机均匀地抽取一个数字,进行一些计算,然后将新数字放回集合中。 (需要的样本数量很大)

我尝试将数字存储在列表中并使用 random.choice() 来选择一个元素,将其删除,然后添加新元素。但这太慢了!

我正在考虑将数字存储在一个 numpy 数组中,对索引列表进行采样,然后为每个索引执行计算。

  • 有没有更快的方法来完成这个过程?

最佳答案

Python 列表在内部实现为数组(如 Java ArrayList、C++ std::vector 等),因此从中间移除一个元素相对慢:所有后续元素都必须重新索引。 (有关更多信息,请参阅 http://www.laurentluce.com/posts/python-list-implementation/。)由于元素的顺序似乎与您无关,我建议您只使用 random.randint(0, len(L) - 1) 选择索引 i,然后使用 L[i] = calculation(L[i]) 更新第 i 元素.

关于python - 从 python 中具有固定数量元素的集合中进行非常快速的采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7815263/

相关文章:

svn - TFS 对大团队有效,SVN 对小团队有效吗?

c# - 反序列化 XML 文件而不将其全部加载到内存中

python - Django Rest Framework - 在序列化程序中获取相关模型字段

Python 参数和函数

python - 获取两个字典列表之间的差异(结果为两个差异列表)

python - 从大小为 N(概率加权)的集合生成随机大小为 k 的子集

java - random.nextInt(12*4+2) 的含义

python - 如何通过终端获取mac os的语言

python - 使用正则表达式在 CSV 字符串中填充空格

php - 选择随机值 MYSQL 但不是当前值