yzt15806542928's picture
Upload folder using huggingface_hub
f1d3656 verified
Raw
History Blame Contribute Delete
2.56 kB
####################################################################################################
#
# Copyright (C) 2022
#
####################################################################################################
#
# project : atmorep
#
# author : atmorep collaboration
#
# description :
#
# license :
#
####################################################################################################
import code
import numpy as np
import xarray as xr
import atmorep.config.config as config
######################################################
# Normalize #
######################################################
def normalize( data, norm, dates, year_base = 1979) :
corr_data = np.array([norm[12*(dt.year-year_base) + dt.month-1] for dt in dates])
mean, var = corr_data[:, 0], corr_data[:, 1]
if (var == 0.).all() :
print( f'Warning: var == 0')
assert False
if len(norm.shape) > 2 : #global norm
return normalize_local(data, mean, var)
else:
return normalize_global( data, mean, var)
######################################################
def normalize_local( data, mean, var) :
data = (data - mean) / var
return data
######################################################
def normalize_global( data, mean, var) :
for i in range( data.shape[0]) :
data[i] = (data[i] - mean[i]) / var[i]
return data
######################################################
# Denormalize #
######################################################
def denormalize(data, norm, dates, year_base = 1979) :
corr_data = np.array([norm[12*(dt.year-year_base) + dt.month-1] for dt in dates])
mean, var = corr_data[:, 0], corr_data[:, 1]
if len(norm.shape) > 2 :
return denormalize_local(data, mean, var)
else:
return denormalize_global(data, mean, var)
######################################################
def denormalize_local(data, mean, var) :
if len(data.shape) > 3: #ensemble
for i in range( data.shape[0]) :
data[i] = (data[i] * var) + mean
else:
data = (data * var) + mean
return data
######################################################
def denormalize_global(data, mean, var) :
if len(data.shape) > 3: #ensemble
data = data.swapaxes(0,1)
for i in range( data.shape[0]) :
data[i] = ((data[i] * var[i]) + mean[i])
data = data.swapaxes(0,1)
else:
for i in range( data.shape[0]) :
data[i] = (data[i] * var[i]) + mean[i]
return data