我正在編寫用於沿numpy數組長度添加數據的代碼(用於組合衛星數據記錄)。爲了做到這一點我的代碼讀取兩個數組,然後使用函數當'疊加'數組時,Python MemoryError
def swath_stack(array1, array2):
"""Takes two arrays of swath data and compares their dimensions.
The arrays should be equally sized in dimension 1. If they aren't the
function appends the smallest along dimension 0 until they are.
The arrays are then stacked on top of each other."""
if array1.shape[1] > array2.shape[1]:
no_lines = array1.shape[1] - array2.shape[1]
a = np.zeros((array2.shape[0], no_lines))
a.fill(-999.)
new_array = np.hstack((array2, a))
mask = np.zeros(new_array.shape, dtype=int)
mask[np.where(new_array==-999.)] = 1
array2 = ma.masked_array(new_array, mask=mask)
elif array1.shape[1] < array2.shape[1]:
no_lines = array2.shape[1] - array1.shape[1]
a = np.zeros((array1.shape[0], no_lines))
a.fill(-999.)
new_array = np.hstack((array1, a))
mask = np.zeros(new_array.shape, dtype=int)
mask[np.where(new_array==-999.)] = 1
array1 = ma.masked_array(new_array, mask=mask)
return np.vstack((array1, array2))
使兩個中的一個陣列中的線
window_data = swath_stack(window_data, stack_data)
倘若所考慮的陣列在等於swath_stack()函數的寬度縮減爲np.vstack()。我的問題是在這個階段我一直遇到MemoryError
。我知道在算術運算符的情況下,在算術運算時(例如array1 += array2
而不是array1 = array1 + array2
),它的內存效率更高,但我不知道如何在使用swath_stack()函數時避免這種內存問題。
任何人都可以請幫忙嗎?
你的數組的大小和類型是什麼?你有多少內存? –