크기가 [frame, x, y]
인 픽셀 강도의 큰 3 차원 배열로 구성된 일부 이미징 데이터를 분석합니다. 이들은 보통 메모리에 보관하기에는 너무 크기 때문에 PyTables 배열로 하드 디스크에 상주합니다.PyTables : 큰 배열의 여러 차원 인덱싱
내가 할 수 있기를 원하는 것은 모든 프레임에서 픽셀의 임의의 하위 집합의 강도를 읽는 것입니다.
import numpy as np
import tables
tmph5 = tables.open_file('temp.hdf5', 'w')
bigarray = tmph5.create_array('/', 'bigarray', np.random.randn(1000, 200, 100))
roipixels = [[0, 1, 2, 4, 6], [34, 35, 36, 40, 41]]
roidata = bigarray[:, roipixels[0], roipixels[1]]
# IndexError: Only one selection list is allowed
불행하게도이 PyTables는 현재 목록 인덱스의 단일 세트를 지원하는 것 :이 작업을 수행하는 자연적인 방법은 목록 색인 것 같다. 추가 문제는 목록 색인에 중복을 포함 할 수 없다는 것입니다. 픽셀 x 좌표의 내 목록에 [1, 1]
이 포함되어 있기 때문에 픽셀 [1, 2]
과 [1, 3]
을 동시에 읽을 수 없습니다.
roidata = np.asarray([row[roipixels[0], roipixels[1]] for row in bigarray])
하지만, 이러한 반복적 인 내가 처리하고있어 프레임의 많은 수에 매우 느려질 수 읽기 : 나는 배열의 행을 반복 할 수 있음을 알고있다.
더 좋은 방법이 있나요? 필자는 PyTables에 비교적 익숙하지 않기 때문에 큰 배열에서 데이터 집합을 구성하는 것에 대한 조언이 있으면 그 파일을 듣고 싶습니다.
내가 그 사실 HDF5의 기본 제한보다는 pytables 제한 생각 (I가 완전히 잘못 될 수 있습니다. ..). 여하튼,'h5py'는 테이블이 아닌 데이터에 더 자연 스럽다. 그러나이 경우에도 동일한 제한이 있습니다. –