Я изо всех сил стараюсь работать с большими массивами.Вот сценарий.Я работаю с изображениями размером 300–950 МБ и использую GDAL для чтения их как массивов Numpy.Чтение в массиве использует ровно столько памяти, сколько можно было ожидать, т.е.250 МБ для изображения 250 МБ и т. Д. *
Моя проблема возникает, когда я использую numpy для получения среднего, минимального, максимального или стандартного отклонения.В main () я открываю изображение и читаю массив (типа ndarray).Затем я вызываю следующую функцию, чтобы получить стандартное отклонение для двумерного массива:
def get_array_std(input_array):
array_standard_deviation = numpy.std(input_array, copy=False)
return array_standard_deviation
Здесь у меня постоянно возникают ошибки памяти (на машине 6 ГБ).Из документации похоже, что numpy возвращает ndarray с той же формой и dtype, что и мой ввод, тем самым удваивая объем памяти.
Использование:
print type(array_standard_deviation)
Возвращает:
numpy.float64
Дополнительно, используя:
print array_standard_deviation
Возвращает тип с плавающей запятой, как и следовало ожидать.Numpy читает массив снова, чтобы выполнить этот расчет?Буду ли я лучше перебирать массив и вручную выполнять вычисления?Как насчет работы со сплющенным массивом?
Я попытался поместить каждый статистический вызов (numpy.amin (), numpy.amax (), numpy.std (), numpy.mean ()) в их собственную функциютак что большой массив вышел бы из области видимости, но не повезло.Я также пытался использовать приведение к другому типу, но без радости.