我正在努力工作與大numpy陣列。這是場景。我正在使用300MB - 950MB的圖像,並使用GDAL將它們作爲Numpy陣列讀取。在數組中讀取使用的內存與預期的一樣多,即。 250MB的圖像等250MB ...Numpy.mean,amin,amax,std巨大的回報
我使用numpy獲得平均值,最小值,最大值或標準偏差時發生問題。在main()中,我打開圖像並讀取數組(類型爲ndarray)。然後我調用下面的函數,來獲取標準差,二維數組:
def get_array_std(input_array):
array_standard_deviation = numpy.std(input_array, copy=False)
return array_standard_deviation
在這裏,我經常遇到內存錯誤(6GB的機器上)。從documentation看起來numpy看起來像是一個與我的輸入相同的形狀和dtype的ndarray,因此內存大小加倍。
使用:
print type(array_standard_deviation)
返回:
numpy.float64
此外,使用:
print array_standard_deviation
返回浮點STD正如人們所期望。 numpy是否再次讀取數組以執行此計算?我會更好地迭代數組並手動執行計算(s)?如何處理扁平數組?我試過把每個統計調用(numpy.amin(),numpy.amax(),numpy.std(),numpy.mean())放到它們自己的函數中,這樣大數組就會超出範圍,但那裏沒有運氣。我也嘗試將其歸類爲另一種類型,但沒有喜樂。
只是試圖更改爲input_array.std()並沒有運氣。通過插入raw_input()調用並使用資源監視器,我可以在每次調用時通過數組大小來查看python內存使用情況。我將input_array傳遞給該函數,然後像上面那樣調用它。這[鏈接](http://stackoverflow.com/questions/986006/python-how-do-i-pass-a-variable-by-reference)表明我正確地傳遞變量。 – Jzl5325
這真的很奇怪。你可以直接調用numpy.std()函數來替換函數調用嗎?或者有什麼理由需要用get_array_std()來包裝numpy.std()?我猜你有理由這樣做。根據你告訴我的,我認爲你正確地傳遞了這個變量。當你看到資源消耗跳轉時,在什麼情況下調用get_array_std()你是用簡約的腳本來測試它嗎? – keflavich