我需要从固定大小的集合中随机均匀地抽取一个数字,进行一些计算,然后将新数字放回集合中。 (需要的样本数量很大)
我尝试将数字存储在列表中并使用 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/