2017-03-27 1 views
0

나는 거대한 시퀀스 (1000000)의 작은 매트릭스 (32x32)가 hdf5 파일에 저장되어 있는데, 각각은 라벨이 붙어있다. 이 매트릭스 각각은 특정 시간의 센서 데이터를 나타냅니다.hdf5 파이썬으로 매트릭스 읽기

매트릭스의 각 x, y 위치에 대해 다른 작은 시간 조각에 대해 각 픽셀에 대한 진화를 얻고 싶습니다.

예상보다 많은 시간이 걸립니다.

def getPixelSlice (self,xpixel,ypixel,initphoto,endphoto): 

     #obtain h5 keys inside time range between initphoto and endphoto 
     valid=np.where(np.logical_and(self.photoList>=initphoto,self.photoList<endphoto)) 

     #look at pixel data in valid frames 
     evolution = [] 

     #for each valid frame, obtain the data, and append the target pixel to the list. 
     for frame in valid[0]: 
      data = self.h5f[str(self.photoList[frame])]   
      evolution.append(data[ypixel][xpixel]) 

     return evolution,valid 

답변

0

그래서 비슷한 응용 프로그램을 분류하는 데 시간이 걸렸습니다. 하드 드라이브의 물리적 한계로 인해 데이터는 3 차원 배열로 항상 한 방향에서 다른 방향보다 읽기 쉽도록 저장됩니다. 데이터를 저장 한 순서에 따라 달라집니다.

처리 방법은 응용 프로그램에 따라 다릅니다. 내 특정 응용 프로그램은 "쓰기가 적고 많이 읽습니다"로 특징 지어 질 수 있습니다. 이 경우 데이터를 읽는 순서대로 데이터를 저장하는 것이 가장 좋습니다. 이를 위해 PyTables를 사용하고 내 timeseries 중 하나와 같은 "덩어리 모양"을 지정합니다. 따라서 귀하의 경우에는 (1,1,1000000)이됩니다. 그 크기가 너무 크거나 작 으면 잘 모르겠다. 그래서 너는 좀 더 멀리, 말하자면 (1,1,10000) 그런 식으로 분해해야 할 수도있다. 특정 방향으로 여러 번 읽어하고자하는 응용 프로그램의 경우

For more info see PyTables Optimization Tips.

, 당신이 당신의 HDF5 배열에 대한 적절한 척 모양을 선택하는 것이 중요합니다.

관련 문제