2017-04-18 191 views
1

我有一個大型圖像數據集來存儲。我有30萬張圖片。每個圖像是28800個像素的矢量,這意味着我有(300000, 28800)如何存儲和加載巨大的圖像數據集?

我存儲,作爲遵循

img_arr = np.stack(images, axis=0) 

np.savetxt('pixels_dataset_large.csv',img_arr,delimiter=",") 

然而它需要較長時間來加載它和一些倍升得到存儲器錯誤的矩陣:

有沒有其他的選擇來優化存儲和加載它?

+3

'np.save' /'np.load'有什麼問題?它將數據保存在內存中,因此不會涉及任何分析,並且該過程將與磁盤允許的速度一樣快。 –

+0

@ivan_pozdeev,l只有在加載時纔有probelm。當我嘗試np.load()l得到TypeError:load()得到了一個意外的關鍵字參數'dtype' – vincent

+2

這意味着你正在使用'load'不正確。 [它沒有'dtype'參數](https://docs.scipy.org/doc/numpy/reference/generated/numpy.load.html)。 –

回答

0

如果您要將300,000 x 28,000個數據保存到csv,那麼假設您使用的是浮點表示形式,則您將根據輸出的精度查看輸出文件大小僅爲1兆兆字節。即使你有四兆兆字節的磁盤空間,CSV在這個規模上的效率也非常低。

在這種情況下,我會提出一些二進制存儲方案(例如hdf5)。您可以查看xarray包:它非常適合處理這種大小的密集陣列數據,它具有非常類似於NumPy的API,甚至可以利用Dask來透明地支持並行和/或內存映射計算。