2013-06-04 40 views
3

我正在收集大量數據,這些數據將使用h5py保存到各個H5文件中。我想將這些圖像拼貼到一個pcolormesh圖中以保存爲單個圖像。使用Python生成保存在H5文件中的非常大的數據集中的pcolormesh圖像

我一直在處理的一個快速示例將生成2000x2000個隨機數據點的數組,並使用h5py將它們保存在H5文件中。然後我嘗試導入這些文件中的數據,並嘗試將它作爲pcolormesh繪製在matplotlib中,但我總是遇到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() 

的範圍值循環可以改變,直到100,但沒有一個內存錯誤,我可以選擇的最大值爲5(即5可以在matplotlib中的pcolormesh圖上打補丁),它非常笨重和緩慢。我需要能夠將許多圖像拼湊在一起。

是否有任何其他技術我應該用來繪製這些數據?或者,如果我可以將多個H5文件中的數據轉換爲圖像而不經過matplotlib或類似的程序(如scipy),那將會很好。

總之,我的問題是這樣的:

  • 我有大量的HDF5文件和圖像數據(2000×2000)
  • 我需要將這些文件拼湊成一個單一的圖像,並將其保存

任何幫助表示讚賞。另外,我很樂意回答有關我的問題的任何其他問題。


編輯(2013年6月5日):

我覺得類似的問題將是如何處理(進口,處理,編輯,等等)可以用Python非常高的分辨率的圖像。這基本上是我想要做的;從一組較小的圖像生成一個非常高分辨率的圖像。

+2

嘗試使用'imshow'與'interpolation =「none」'而不是'pcolormesh'。您需要更改指定圖像位置的方式(例如,使用「範圍」kwarg而不是傳入x和y),但它應該更快。 –

+1

你能不能抽樣嗎? – tacaswell

+0

dtype是什麼數據?你能以較低的精度逃脫嗎?我懷疑你的眼睛能夠區分float32和float64(或int16) – matt

回答

0

減少matplotlib中圖像膨脹的一種方法(尤其是在保存到SVG時)是使用kwarg的rasterized=True。這將使您的pcolormesh變得「扁平化」,這使得它更快地保存,使用更少的資源等。

相關問題