我目前正在使用一个函数来枚举特定数组(有向图)中的所有循环,我需要它们。此函数将所有循环作为列表列表返回(每个子列表都是一个循环,例如 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 个周期。相反,我得到了一个不同的内存错误:新解析器没有内存。
此过程适用于返回 2 个子列表的 11 节点完整有向图,第一个包含 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]
任何帮助都将受到欢迎,
谢谢阅读,
阿莱克斯