我正在分析一些成像数据,这些数据由大型 3 维像素强度数组组成,尺寸为[frame, x, y]
. 由于这些通常太大而无法保存在内存中,因此它们作为 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 目前似乎只支持一组列表索引。另一个问题是列表索引不能包含重复项 - 我无法同时读取像素[1, 2]
和[1, 3]
,因为我的像素 x 坐标列表将包含[1, 1]
. 我知道我可以遍历数组中的行:
roidata = np.asarray([row[roipixels[0], roipixels[1]] for row in bigarray])
但是对于我正在处理的大量帧,这些迭代读取变得非常慢。
有没有更好的方法来做到这一点?我对 PyTables 比较陌生,所以如果你有任何关于在大型数组中组织数据集的技巧,我很想听听。