파이썬을 사용하여 큰 파일을 분석하고 메모리 문제가 발생하고 있으므로 sys.getsizeof ()를 사용하여 사용량을 추적하려고 시도했지만 사용량이 많은 배열의 동작은 기괴합니다. 다음은 내가 열어야 할 알베도 스 맵과 관련된 예입니다.
>>> 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 픽셀 맵인 객체의 크기는 ~ 200Mb에서 80 바이트로 줄었습니다. 메모리 문제가 끝나고 모든 것을 numpy 배열로 변환하기를 희망하지만이 행동이 사실이라면 어떤 식 으로든 정보 이론이나 열역학 또는 무언가를 위반 할 것이라고 생각합니다. getsizeof ()는 numpy 배열에서 작동하지 않는다고 생각했습니다. 어떤 아이디어?
이로 인해 특히 타사 확장
—
Joel Cornett
getsizeof
의 경우 메모리 소비에 대한 신뢰할 수없는 지표가됩니다 .
기본적으로 여기서 문제 는 새 배열이 아닌을
—
mgilson
resize
반환 한다는 것 입니다 view
. 실제 데이터가 아닌 뷰의 크기를 얻습니다.
이를
—
에릭
sys.getsizeof(albedo.base)
위해 비보기의 크기를 제공합니다.
sys.getsizeof
: "바이트 단위로 객체의 크기를 반환합니다. 객체는 모든 유형의 객체가 될 수 있습니다. 모든 내장 객체는 올바른 결과를 반환하지만 타사 확장명을 그대로 유지할 필요는 없습니다. "구체적으로 직접 메모리에 기여하는 메모리 소비 만 설명하고, 오브젝트가 참조하는 메모리 소비는 설명하지 않습니다."