У меня есть довольно большой массив NumPy
, с которым мне нужно выполнить операцию, но когда я это делаю, мой ~ 2 ГБ массив требует ~ 30 ГБ ОЗУ для выполнения операции.Я читал, что NumPy
может быть довольно неуклюжим с использованием памяти, но это кажется чрезмерным.
Кто-нибудь знает альтернативный способ применения этих операций для ограничения загрузки ОЗУ?Возможно построчно / на месте и т. Д .?
Код ниже (игнорируйте бессмысленные вычисления, в моем коде коэффициенты различаются):
import xarray as xr
import numpy as np
def optimise(data):
data_scaled_offset = (((data - 1000) * (1 / 1)) + 1).round(0)
return data_scaled_offset.astype(np.uint16)
# This could also be float32 but I'm using uint16 here to reduce memory load for demo purposes
ds = np.random.randint(0, 12000, size=(40000,30000), dtype=np.uint16)
ds = optimise(ds) # Results in ~30GB RAM usage