2017-06-13 60 views
0

有大數組,我想閱讀並堆疊起來,如:內存有效的方式堆疊陣列中的蟒蛇

>>> x=npy.arange(10).reshape(5,2) 
>>> y=npy.arange(10,20).reshape(5,2) 
>>> npy.append(x,y) 
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 
     17, 18, 19]) 

>>> z.reshape(2,x.shape[0],x.shape[1]) 
array([[[ 0, 1], 
     [ 2, 3], 
     [ 4, 5], 
     [ 6, 7], 
     [ 8, 9]], 

     [[10, 11], 
     [12, 13], 
     [14, 15], 
     [16, 17], 
     [18, 19]]]) 

,但結果會大,越做越有out_of_memory終於程序停止。 代碼:

for i in range(1, days+1): 
    with rasterio.open(directory+"B04_"+str(i)+".jp2") as dataset: 
     band_4=dataset.read()[0] 

    with rasterio.open(directory+"B08_"+str(i)+".jp2") as dataset: 
     band_8=dataset.read()[0] 

    _=(band_8- band_4)/(band_8+ band_4+0.0000001) 
    ndvi=npy.append(ndvi, ـ) 

ndvi=ndvi.reshape(days ,band_8.shape[0],band_8.shape[1]) 

什麼是讀取和附加陣列最多的內存有效的方法?

+0

多少個數組和多少個大小? – hpaulj

+0

'y = npy.arange(20).reshape(5,2)'從您的示例中產生錯誤。 – saintsfan342000

+0

像這樣使用'npy.append'並不理想,速度快,但不應該影響空間的使用。遲早,當您添加更多文件時,您將遇到內存錯誤。在某些時候,得到的數組將比RAM更大。還有其他最近關於串聯數組的問題。 – hpaulj

回答

0

嘗試Dask(http://dask.pydata.org/)它應該解決您的問題。這個庫允許把你的數據的一部分放在磁盤上,如果它很大以適應內存。

+0

這個答案似乎更適合作爲評論 – TheDarkKnight

+0

測試它,但對我沒有幫助。 –