我目前正在使用一个枚举特定数组(一个有向图)中的所有循环的函数,我需要它们全部。此函数以列表列表的形式返回所有循环(每个子列表是一个循环,例如,result = [[0,1,0],[0,1,2,0]]是一个包含2个以节点开头和结尾的循环的列表) 0)。但是,有数百万个循环,因此对于大图,我会遇到内存错误(MemoryError:MemoryError()),因为包含所有循环的列表列表太大。
我希望函数将结果分成几个数组,这样就不会出现内存错误。那可能吗?并能解决问题吗?
我试图通过将结果数组拆分为子结果列表来做到这一点(子结果的最大大小为1000万,这比此处说明的5亿最大大小还小:Python数组可以得到多大?) 。这个想法是结果是一个包含子结果的列表:result = [sub-result1,sub-result2]。但是,我得到了另一个内存错误:新解析器没有内存。
我这样做的方式如下:
if SplitResult == False:
result = [] # list to accumulate the circuits found
# append cycles to the result list
if cycle_found(): #cycle_found() just for example
result.append(new_cycle)
elif SplitResult == True:
result = [[]] # list of lists to accumulate the circuits found
# append cycles to the LAST result SUB-lists
if cycle_found(): #cycle_found() just for example
result[len(result)-1].append(new_cycle)
# create a new sublist when the size of the LAST result SUB-lists
# reaches the size limit (ResultSize)
if len(result[len(result)-1]) == ResultSize:
result.append([])
也许问题是我将所有子结果合并到结果列表中。在那种情况下,如何从函数返回可变数量的结果?
特别是,我将一个12节点完整有向图的所有简单周期划分为1000万个周期的子列表。我知道总共有115,443,382个周期,所以我应该得到一个包含16个子列表的列表,前15个包含1000万个周期,最后一个包含443,382个周期。取而代之的是,我得到了另一个内存错误:新解析器没有内存。
此过程适用于11个节点的完整图,该图返回2个子列表,第一个包含1000万个循环(10000000),另一个包含976184。如果有帮助,它们的内存占用量为
>>> sys.getsizeof(cycles_list[0])
40764028
>>> sys.getsizeof(cycles_list[1])
4348732
然后,我想我们应该添加列出的每个循环的大小:
>>> sys.getsizeof(cycles_list[0][4])
56
>>> cycles_list[0][4]
[0, 1, 2, 3, 4, 0]
任何帮助将是最欢迎的,
相关分类