현재 특정 배열 (다이 그래프) 내의 모든 사이클을 나열하는 함수로 작업 중이며 모두 필요합니다. 이 함수는 모든 사이클을리스트리스트로 반환합니다 (각 서브리스트는 사이클입니다, 예 : result = [[0,1,0], [0,1,2,0]]은 노드에서 시작하고 끝나는 2 사이클을 포함하는리스트입니다) 0). 그러나, 큰 사이클 그래프가 들어 있기 때문에 모든 사이클을 포함하는리스트의 목록이 너무 크기 때문에 메모리 오류 (MemoryError : MemoryError())가 발생합니다.파이썬 : 메모리 오류를 피하기 위해 함수에서리스트를 분리하고 리턴하는 방법
메모리 오류가 발생하지 않도록 함수가 여러 배열로 결과를 분할하고 싶습니다. 그게 가능하니? 문제를 해결할 수 있을까요?
결과 배열을 하위 결과 목록으로 분할하여이를 수행하려고했습니다. 하위 결과는 최대 크기입니다 (예 : 에 표시된 최대 5 억 개 이하의 최대 크기가 1,000 만 개). 아이디어는 결과가 하위 결과를 포함하는 목록이라는 것입니다. 결과 = [하위 결과 1, 하위 결과 2]. 그러나 다른 메모리 오류가 발생합니다. 새 파서에 대한 mem이 없습니다.
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 개는 각각 1 천만 사이클을 포함하고 마지막 하나는 443,382 사이클을 포함합니다. 대신에 새로운 메모리 오류가 발생합니다 : 새로운 파서에 대한 mem이 없습니다. 이 절차는이 개 하위 목록, 제 1 수 10 만회 (10000000) 그것은 어떤 도움이다 경우 976184.를 포함하는 기타를 반환하는 11 노드 완벽한 소리를 나타내는 두 글자 작동
는 자신의 메모리 풋 프린트는
>>> 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]
,
감사 :
그런 다음, 우리가 나열된 각주기의 크기를 추가해야합니다 생각
알렉스
당신이 필요합니까 * 한 번에 가능한 사이클의 모든 *? – Blender
그래, 대신 발전기 기능을 사용할 수 있습니까? –
나는 지금 당장 모른다. 나는 발전기 기능이 무엇인지 배우게 될 것이다 (나는 프로그래머가 아니다). 당신에게 다시 돌아온다. – Aleix