2011-12-27 4 views
7

어떻게 pytables를 사용하여 거대한 numpy 배열을 만들 수 있습니까? 이 시도했지만 나에게 "ValueError : 배열 너무 큽니다." 오류 :pytables를 사용하여 엄청난 수의 배열을 구축하십시오.

import numpy as np 
import tables as tb 
ndim = 60000 
h5file = tb.openFile('test.h5', mode='w', title="Test Array") 
root = h5file.root 
h5file.createArray(root, "test", np.zeros((ndim,ndim), dtype=float)) 
h5file.close() 

답변

8

당신은 압축 지원하지만 같은 tables.CArray 클래스를 사용을 시도 할 수 있습니다 ...

내가 질문을 생각하면 그것을 저장하기 전에 NumPy와 사용하여 배열을 생성하기 때문에 pytables보다 NumPy와에 대한 자세한 내용입니다 파이 테이블. 당신이 np.zeros ((ndim, ndim) 실행 램을 많이 필요로하는 방식으로

-이 아마 예외 장소이다. ". ValueError를이 : 배열이 너무 커서"가 발생을

매트릭스/배열은 scipy에서 사용할 수 희소 행렬 표현을 사용할 수 있습니다 다음 조밀하지 않은 경우 : http://docs.scipy.org/doc/scipy/reference/sparse.html 또 다른 방법은 한 번에 전체 배열을 필요로하지 마십시오 경우 덩어리를 통해 배열에 액세스하려고하는 것입니다

- 체크 아웃 이 스레드 : Very large matrices using Python and NumPy

14

피기 백 오프 @ b1r3k의 응답으로 한꺼번에 액세스하지 않는 배열을 만들 수 있습니다 (예 : 모든 것을 메모리에 저장), CArray (청크 분할)을 사용하려고합니다. 아이디어는 점진적으로 채우고 액세스하는 것입니다.

import numpy as np 
import tables as tb 
ndim = 60000 
h5file = tb.openFile('test.h5', mode='w', title="Test Array") 
root = h5file.root 
x = h5file.createCArray(root,'x',tb.Float64Atom(),shape=(ndim,ndim)) 
x[:100,:100] = np.random.random(size=(100,100)) # Now put in some data 
h5file.close() 
관련 문제