2017-12-19 5 views
0

別々のファイルに含まれるいくつかのデータセットを最終ファイルに属する別のデータセットにマージする必要があります。 部分データセット内のデータの順序は、最終データセットにコピーされるときには保持されません。部分データセット内のデータは、インデックスを介して最後のデータセットに「マップ」されます。私は2つのリスト、final_indicesとpartial_indicesを作成し、書いた:hppyデータセットのインデックスとしてnp配列を使用することは可能ですか?

final_dataset = final_hdf5file['dataset'] 
partial_dataset = partial_hdf5file['dataset'] 

# here partial ad final_indices are lists. 
final_dataset[final_indices] = partial_dataset[partial_indices] 

これに伴う問題は、パフォーマンスが非常に悪いということである - と理由がfinal_とpartial_indicesの両方がリストでなければならないということです。 私の回避策は、最終的なデータセットと部分的なデータセットから2つのnp配列を作成し、np配列をインデックスとして使用することでした。

final_array = np.array(final_dataset) 
partial_array = np.array(partial_dataset) 
# here partial ad final_indices are nd arrays. 
final_array[final_indices] = partial_array[partial_indices] 

最後の配列は、最後のデータセットに書き換えられます。

final_dataset[...] = final_array 

しかし、そうするのはむしろやや優しいようです。

hppyデータセットのインデックスとしてnp.arraysを使用できますか?

答えて

0

ですから、読み取りと書き込みの両方のための空想-インデックス作成を行っている。

http://docs.h5py.org/en/latest/high/dataset.html#fancy-indexing

それは長いリストで遅くなることがありますと警告しています。

私は実際にテストしていませんが、全体のセットを読み書きすることができ、配列のマッピングを高速化できます。読み取り/書き込みマッピング

http://docs.h5py.org/en/latest/high/dataset.html#reading-writing-data

は、私がデータセットをロードするために、スライス表記(またはvalue)を使用しますが、それはマイナーなポイントだであるとして、高速です。

final_array = final_dataset[:] 

コードが機能しないように見える場合は、コードを非表示にします。

このオンライナーが動作する可能性があります(テストしていません)。 RHSが機能する可能性が高くなります。

final_dataset[:][final_indices] = partial_dataset[:][partial_indices] 
+0

あなたの答えとリンクに感謝します。私の経験は確かに派手なインデックス作成は遅いです。あなたのソリューションはまだ試していませんでしたが、同じ原則を適用しながら私よりもコンパクトに見えます。 –

関連する問題