Я пишу код для добавления данных по длине массива numpy (для объединения записей спутниковых данных). Для того, чтобы сделать это мой код читает два массива, а затем использует функциюPython MemoryError, когда массивы 'stacking'
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)
В том случае, если массивы Рассматриваемые равны width функция swath_stack() сводится к np.vstack(). Моя проблема в том, что я продолжаю сталкиваться с MemoryError
на этом этапе. Я знаю, что в случае арифметических операторов эффективнее делать арифметику на месте (т. Е. array1 += array2
, а не array1 = array1 + array2
), но я не знаю, как избежать такой проблемы с памятью, используя мою функцию swath_stack().
Может ли кто-нибудь помочь?
Каковы размеры и типы ваших массивов? Сколько у вас памяти? –