2013-09-10 2 views
8

저는 파이썬에 초보입니다. 큰 배열, (43200, 4000)과 같은 차원을 가진 a이 있으며 향후 처리를 위해 필요할 때 저장해야합니다. np.savetxt으로 저장하려고하면 txt 파일이 너무 커서 동일한 크기의 5 개 파일을 처리해야하므로 프로그램이 메모리 오류로 실행됩니다. 거대한 배열을 저장하는 방법이 없으므로 메모리를 적게 차지합니까?파이썬에서 메모리를 덜 차지하도록 큰 배열을 저장하는 방법은 무엇입니까?

감사합니다. 텍스트 파일에 데이터를 저장

+3

'np.savetxt ('file.npy.gz')'를 사용해 보셨습니까? 저장하는 데 더 오래 걸리고 (압축으로 인해) 나중에로드 되기는하지만 파일 크기가 크게 줄어 듭니다. – wflynny

+0

@Bill 답장을 보내 주셔서 감사합니다. np.savetxt ('file.npy.gz')로 시도했지만 파일 크기가 줄어들지 만 데이터를 다시로드 할 수 없습니다. – user2766019

+0

파일을 저장 한 파일 확장명이 같은 파일을로드 했습니까? 'np.loadtxt ('file.npy.gz')'. – wflynny

답변

3

당신은 데이터를 저장하는 계층 적 데이터 포맷을 생성 (HDF) 파일을 PyTables을 사용할 수 있습니다. 이것은 당신이 그것을으로 저장된 파일에 대한 작업중인 객체를 연결 몇 가지 흥미로운 메모리 옵션을 제공합니다 여기

이 수행하는 방법을 보여줍니다 다른 StackOverflow의 질문이다. 당신이 기꺼이하는 경우 "How to store a NumPy multidimensional array in PyTables."

이 크기의 파일로
import pandas 
import numpy as np 
a = np.ones((43200, 4000)) # Not recommended. 
x = pandas.HDFStore("some_file.hdf") 

x.append("a", pandas.DataFrame(a)) # <-- This will take a while. 
x.close() 

# Then later on... 
my_data = pandas.HDFStore("some_file.hdf") # might also take a while 
usable_a_copy = my_data["a"] # Be careful of the way changes to 
          # `usable_a_copy` affect the saved data. 

copy_as_nparray = usable_a_copy.values 

, 당신이 당신의 응용 프로그램이 병렬 알고리즘을 수행 할 수 있는지 여부를 고려해 볼 수 있습니다하십시오 팬더 DataFrame 객체로서 어레이와 함께 작동, 당신은 또한 PyTables/HDF5 예에 팬더 인터페이스를 사용할 수 있습니다 잠재적으로 큰 배열의 하위 집합에만 적용됩니다. 계속 진행하기 전에 배열을 모두 소비해야합니다.

10

은 상당히 비효율적이다. Numpy는 큰 배열을 저장하는 데 훨씬 더 적합한 저장 명령 인 savesavez/savez_compressed을 가지고 있습니다.

데이터 사용 방법에 따라 HDF5 형식 (h5py 또는 pytables)을 살펴 봐야합니다. 이렇게하면 큰 데이터 세트를 메모리에 모두로드 할 필요없이 저장할 수 있습니다.

관련 문제