클러스터에서 읽으려고하는 PyTables에서 생성 된 다소 큰 HDF5 파일이 있습니다. 개별 덩어리로 읽는 동안 NumPy에 문제가 있습니다. 이제 예제와 함께 가자 :Numpy 및 PyTables가있는 부동 소수점 예외
HDF5 파일이에 내 배열의 전체 모양,
In [13]: data.shape
Out[13]: (21933063, 800, 3)
이 배열의 각 항목은 np.float64
이다.
크기가 각각 (21933063,10,3)
인 각 노드 읽기 슬라이스가 있습니다. 불행히도 NumPy는 2100 만 개의 모든 서브 프레임을 한 번에 읽을 수없는 것 같습니다. 나는 크기 (2193306,10,3)
10 개 조각으로 이러한 조각을 분할 한 다음 작업 일을 얻을 수 감소 다음 사용하여이 순차적으로 수행하는 것을 시도했다 :
In [8]: a = reduce(lambda x,y : np.append(x,y,axis=0), [np.array(data[i* \
chunksize: (i+1)*chunksize,:10],dtype=np.float64) for i in xrange(k)])
In [9]:
곳 1 <= k <= 10
및 chunksize = 2193306
을. 이 코드는 k <= 9
에서 작동합니다. 그렇지 않으면 나는 다음과 같은 얻을 :
In [8]: a = reduce(lambda x,y : np.append(x,y,axis=0), [np.array(data[i* \
chunksize: (i+1)*chunksize,:10],dtype=np.float64) for i in xrange(k)])
Floating point exception
[email protected] 00:00:00 ~
$
내가 진행하고 PyTables가 범인 인 것처럼 보인다되고 있는지 파악하는 Valgrind의의
memcheck
도구를 사용하여 시도했다. 추적에 나타나는 두 개의 주 파일은
libhdf5.so.6
이고
blosc
과 관련된 파일입니다. 또한
, 나는 k=8
이있는 경우, 내가 얻을 수 있습니다 :
In [12]: a.shape
Out[12]: (17546448, 10, 3)
하지만 마지막 subslice를 추가하는 경우, 내가 얻을 :
In [14]: a = np.append(a,np.array(data[8*chunksize:9*chunksize,:10], \
dtype=np.float64))
In [15]: a.shape
Out[15]: (592192620,)
사람이 무엇을해야하는지의 어떤 아이디어가 있습니까 ? 감사!
무엇 직접 NumPy와 배열에 데이터를 읽을 때 당신이 얻을 오류? 여러 배열을 추가하여 배열을 작성하는 대신 대상 배열을 미리 할당하는 것이 좋습니다. – DaveP