파이썬을 사용하여 일부 큰 파일을 분석하고 있으며 메모리 문제로 인해 실행 중이므로 sys.getsizeof()를 사용하여 사용법을 추적하고 있습니다. numpy 배열을 사용한 동작은 기괴합니다. 여기에 내가 열 필요 해요 알베도의지도와 관련된 예입니다 : 여전히numpy 배열의 파이썬 메모리 사용
>>> import numpy as np
>>> import struct
>>> from sys import getsizeof
>>> f = open('Albedo_map.assoc', 'rb')
>>> getsizeof(f)
144
>>> albedo = struct.unpack('%df' % (7200*3600), f.read(7200*3600*4))
>>> getsizeof(albedo)
207360056
>>> albedo = np.array(albedo).reshape(3600,7200)
>>> getsizeof(albedo)
80
음 데이터의를하지만, 오브젝트하는 3600x7200 픽셀 맵의 크기가 80 바이트 ~ 200 메가 사라 졌 . 내 기억 문제가 끝나기를 바라고 모든 것을 numpy 배열로 바꿔야 겠지만, 사실이 행동이 사실이라면 정보 이론이나 열역학 법칙을 위반하는 것이라고 생각합니다. getsizeof()가 numpy 배열에서는 작동하지 않는다고 생각하는 경향이 있습니다. 어떤 아이디어?
를 : "개체의 크기를 바이트 단위로 반환합니다. 개체는 모든 유형의 개체가 될 수 있습니다. 모든 기본 제공 개체는 올바른 결과를 반환하지만 타사 확장이 구현과 관련되어있을 필요는 없습니다. 오직 메모리 소비량 만 객체에 기인 한 것이지, 참조하는 객체의 메모리 소비가 차지하는 것이 아닙니다. " –
이렇게하면'getsizeof'는 메모리 소비에 대한 신뢰할 수없는 지표가되고, 특히 제 3 자 확장을 위해서는 _ getspecof가됩니다. –
기본적으로, 여기의 문제는'resize'가 새로운 배열이 아닌'view'를 리턴한다는 것입니다. 실제 데이터가 아닌보기의 크기를 얻고 있습니다. – mgilson