ピクセル強度と次元の大きな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は現在、リストインデックスの単一のセットのみをサポートしているようです。さらに問題は、リストインデックスに重複を含めることができないことです。ピクセルのx座標のリストにが含まれるため、ピクセル[1, 2]
とを同時に読み取ることができませんでした。配列内の行を反復処理できることはわかっています。[1, 3]
[1, 1]
roidata = np.asarray([row[roipixels[0], roipixels[1]] for row in bigarray])
しかし、これらの反復読み取りは、私が処理している多数のフレームに対して非常に遅くなります。
これを行うためのより良い方法はありますか?私はPyTablesに比較的慣れていないので、大規模な配列でデータセットを整理するためのヒントがあれば、ぜひ聞いてみてください。