好的,所以我有一个确实需要帮助的问题。
我的程序从pdb文件中读取值,并将这些值存储在(array = [])中,然后从这种存储值的排列中获取4的每种组合,并将其存储在名为maxcoorlist的列表中。由于组合列表的数量如此之多,为了加快处理速度,我想简单地从此组合列表中抽取1000-10000个样本。但是,这样做时,我在随机采样的那一行上遇到了一个内存错误。
MemoryError Traceback (most recent call last)
<ipython-input-14-18438997b8c9> in <module>()
77 maxcoorlist= itertools.combinations(array,4)
78 random.seed(10)
---> 79 volumesample= random_sample(list(maxcoorlist), 1000)
80 vol_list= [side(i) for i in volumesample]
81 maxcoor=max(vol_list)
MemoryError:
在此代码中也使用random.seed()也很重要,因为我将使用种子获取其他样本。
最佳答案
如其他答案所述,list()调用使您内存不足。
取而代之的是,首先遍历maxcoorlist以确定其长度。然后在[0,长度)范围内创建随机数,并将其添加到索引集中,直到索引集的长度为1000。
然后,如果当前索引在您的索引集中,则再次遍历maxcoorlist并将当前值添加到样本集中。
编辑
一种优化是直接计算maxcoorlist的长度,而不是对其进行迭代:
import math
n = len(array)
r = 4
length = math.factorial(n) / math.factorial(r) / math.factorial(n-r)
关于python - 使用random.sample()时发生Python内存错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17935050/