3

h5py を使用して個々の H5 ファイルに保存される大量のデータを収集しています。これらの画像を 1 つの pcolormesh プロットにパッチして、1 つの画像として保存したいと考えています。

私が取り組んできた簡単な例では、2000x2000 のランダム データ ポイントの配列を生成し、h5py を使用して H5 ファイルに保存します。次に、これらのファイルにデータをインポートし、matplotlib で pcolormesh としてプロットしようとしますが、常に memoryError が発生します (これは予想されることです)。

import numpy
import h5py
arr = numpy.random.random((2000,2000))

with h5py.File("TEST_HDF5_SAVE_FILES\\Plot_0.h5", "w") as f:
    dset = f.create_dataset("Plot_0", data = arr)

for i in range(1,100):
    arr = numpy.random.random((2000,2000))
    with h5py.File("TEST_HDF5_SAVE_FILES\\Plot_" + str(i) + ".h5", "w") as f:
        dset = f.create_dataset("Plot_" + str(i), data = arr)

このスクリプトは私のファイルを生成します。プルするのに十分な大きさのファイル セットを取得するためだけに、任意の数として 100 を選びました。

次に、次のスクリプトを使用してそれらをインポートします。

y = numpy.arange(0, 2000, 1)

for display_plot_num in range(0, 5):
    print display_plot_num
    x = numpy.arange(display_plot_num*2000, display_plot_num*2000 + 2000, 1)

    with h5py.File("TEST_HDF5_SAVE_FILES\\Plot_" + str(display_plot_num) + ".h5", "r+") as f:
        data = f["Plot_" + str(display_plot_num)]
        plt.pcolormesh(x, y, data)
plt.show()

for ループの範囲値は 100 まで変更できますが、メモリ エラーなしで選択できる最大値は 5 (つまり、matplotlib の pcolormesh プロットに 5 つのプロットをパッチできます) であり、非常に扱いにくく遅いです。多くの画像をつなぎ合わせる必要があります。

このデータをプロットするために使用する必要がある他の手法はありますか? または、matplotlib や同様のプログラム (scipy など) を使用せずに、複数の H5 ファイルからのデータを画像に変換できればいいと思います。

要約すると、私の問題は次のとおりです。

  • 画像データ (2000x2000) を含む HDF5 ファイルが多数あります
  • これらのファイルを 1 つのイメージにパッチして保存する必要があります

どんな助けでも大歓迎です。また、私の問題についてさらに質問があれば喜んでお答えします。


編集 (5.6.2013):

同様の質問が、Python で非常に高解像度の画像を処理 (インポート、操作、編集など) する方法になると思います。これは本質的に私がやろうとしていることです。小さな画像のコレクションから非常に高解像度の画像を生成します。

4

1 に答える 1

2

matplotlib の画像の肥大化を減らす 1 つの方法 (特に SVG に保存する場合) は、rasterized=Truekwarg を使用することです。これにより、基本的に pcolormesh が「平坦化」され、保存がはるかに高速になり、リソースの使用量が少なくなります。

于 2016-02-26T22:10:57.403 に答える