두 개의 NetCDF 파일 (각각은 521.8MB)에서 데이터를 가져 오는 프로젝트를 진행하고 있습니다. 틀림없이이 파일들은 꽤 큰 파일입니다. 4GB의 메모리가있는 MacBook Pro를 사용하고 있지만 컴퓨터의 수명은 약 4 년입니다. 코드는 Python으로 작성됩니다.대용량 데이터 파일을 효율적으로 가져 오는 방법, Python
파일에는 지구상에 1 년간의 기상 데이터가 들어 있습니다. 시간 (길이 1460), 고도 (길이 17), 위도 (길이 73) 및 경도 (길이 144)를 포함하는 4D 배열입니다. 한 번에 그 정보의 특정 부분 만 필요합니다. 특히, 나는 모든 시간을 필요로 하나의 고도 수준, 그리고 위도와 경도 (20x44)의 특정 지역 만 필요합니다.
두 파일에서이 데이터를 모두 모아서 필요한 데이터 만 확인하고 계산을 수행 한 다음 데이터를 텍스트 파일로 출력하는 코드가있었습니다. 그 해가 끝나고 63 년 동안 같은 크기의 파일 126 개가 반복되었습니다. 이제 코드는 프로세스가 시작될 때 메모리가 부족하다고 말합니다. 관련 코드는 다음과 같습니다.
from mpl_toolkits.basemap.pupynere import NetCDFFile
#Create the file name for the input data.
ufile="Flow/uwnd."+str(time)+".nc"
vfile="Flow/vwnd."+str(time)+".nc"
#Get the data from that particular file.
uu=NetCDFFile(ufile)
vv=NetCDFFile(vfile)
#Save the values into an array (will be 4-dimentional)
uwnd_short=uu.variables['uwnd'][:]
vwnd_short=vv.variables['vwnd'][:]
따라서 첫 번째 섹션은 NetCDF 파일의 이름을 만듭니다. 두 번째 섹션은 NetCDF 파일에서 모든 데이터를 가져옵니다. 세 번째 섹션에서는 가져온 데이터를 가져 와서 4D 배열에 배치합니다. (이것은 기술적으로 파이썬이 데이터와 어떻게 작동하는지에 대한 배열이 아니지만 C++ 배경 때문에 생각했습니다. 적절한 어휘 부족에 대해 사과합니다.) 나중에 필자는 필요한 특정 데이터를 분리합니다. 4D 배열에서 가져 와서 필요한 계산을 수행하십시오. 문제는 이것이 작동하는데 사용되었지만, 이제는 컴퓨터가 vv=NetCDFFile(vfile)
라인에서 작업하는 동안 메모리가 부족합니다.
어딘가에 메모리 누수가 있습니까? 전체 파일을 가져 오지 않도록 필요한 특정 범위의 데이터 만 가져 오는 방법이 있습니까? 데이터를 가져 와서 계산에 필요한 데이터 섹션을 정렬하는 것보다 효율적인 방법이 있습니까?
가능한 경우 가져 오는 파일에서 몇 줄의 샘플 데이터를 제공 할 수 있습니까? – ChrisProsser
하나의 파일을 가져 와서 배열에 저장하고 배열을 출력하면 다음과 같이됩니다. '[[[4.10000610e + 00 4.50001526e + 00 4.80000305e + 00 ..., 2.90000916e + 00 3.30000305e + 00 3.70001221e + 00] [3.00001526e + 00 3.50001526e + 00 3.90000916e + 00 ..., 1.60000610e + 00 2.10000610e + 00 2.50001526e + 00 [-9.99984741e-01 - 6.99996948e-01 -3.99993896e-01 ..., -1.49998474e + 00 -1.39999390e + 00-1.19999695e + 00 ... '물론 숫자는 계속되고 나중에 척도와 오프셋을 사용합니다. – Stephen
ncdump를 마침내 알아 낸 덕분에 출력은 다음과 같이 보입니다. -16146, -16176, -16226, -16306, -16436, -16616, -16836, -17056, -17286, -17506, -17706, -17866 , -17976, -18016, -17996, -17916, -17776, -17566, -17306, -17016, -16746, -16526, -16416, -16416, -16496, -16606, -16726, – Stephen