大佬教程收集整理的这篇文章主要介绍了在 python 中在 xarray 上应用 R 函数 qmap 加速,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试在 Python 中的网格数据集上使用在 R 中实现的偏差校正函数。我在网上找到了一个循环遍历每个网格点的示例。
import pickle
import numpy as np
import xarray as xr
import pandas as pd
import matplotlib.pyplot as plt
import sys
from rpy2.robjects.packages import importr
import rpy2.robjects.numpy2ri
rpy2.robjects.numpy2ri.activate()
qmap = importr('qmap')
from rpy2.robjects import pandas2ri
from rpy2.robjects import r
import glob
sys.setrecursionlimit(10000)
import traceBACk
def bias_correction(x,y):
q_map = qmap.fitQmap(x,y,method="RQUANT",qstep=0.01,wett_day=falsE)
qm1 = qmap.doQmap(y,q_map)
bias_corrected_output = {}
bias_corrected_output['params'] = q_map
bias_corrected_output['outputs'] = qm1
return bias_corrected_output
def bias_correction_model(y,q_map):
qm1 = qmap.doQmap(y,q_map)
bias_corrected_output = {}
bias_corrected_output['outputs'] = qm1
return bias_corrected_output
observed = 'temp_CRUJRA_1951-1985.nc'
prcp_hist = 'temp_ACCESS-ESM1-5_1951-1985.nc'
prcp_liG = 'temp_liG.nc'
observed = xr.open_dataset(observed)
model_hist = xr.open_dataset(prcp_hist)
model_liG = xr.open_dataset(prcp_liG)
observed = observed['temp']
model_hist = model_hist['temp']
model_liG = model_liG['temp']
lats = observed.lat.values
lons = observed.lon.values
bias_corrected_results_hist = np.zeros([len(model_hist.time.values),len(model_hist.lat.values),len(model_hist.lon.values)])
bias_corrected_results_hist[:] = np.nan
bias_corrected_results_liG = np.zeros([len(model_liG.time.values),len(model_liG.lat.values),len(model_liG.lon.values)])
bias_corrected_results_liG[:] = np.nan
model_hist_values = model_hist.values
hist_Dict = {}
hist_Dict['time'] = model_hist.time.values
hist_Dict['lon'] = model_hist.lon.values
hist_Dict['lat'] = model_hist.lat.values
modelliG_values = model_liG.values
liG_Dict = {}
liG_Dict['time'] = model_liG.time.values
liG_Dict['lon'] = model_liG.lon.values
liG_Dict['lat'] = model_liG.lat.values
observation_attr_values = observed.values
correct_params = []
for i,lat in enumerate(lats):
for j,lon in enumerate(lons):
params_Dict = {}
if np.isnan(model_hist_values[0,i,j]) or np.isnan(observation_attr_values[0,j]):
bias_corrected_results_hist[:,j] = np.nan
params_Dict['lat'] = lat
params_Dict['lon'] = lon
params_Dict['params'] = np.nan
else:
try:
y = model_hist_values[:,j]
x = observation_attr_values[:,j]
y_liG = modelliG_values[:,j]
temp = bias_correction(x,y)
q_map = temp['params']
temp_liG = bias_correction_model(y_liG,q_map)
bias_corrected_results_liG[:,j] = temp_liG['outputs']
bias_corrected_results_hist[:,j] = temp['outputs']
if i%5==0 and j%5==0:
print(lat,lon)
params_Dict['lat'] = lat
params_Dict['lon'] = lon
params_Dict['params'] = temp['params']
except:
bias_corrected_results_hist[:,j] = np.nan
bias_corrected_results_liG[:,j] = np.nan
params_Dict['lat'] = lat
params_Dict['lon'] = lon
params_Dict['params'] = np.nan
correct_params.append(params_Dict)
ds_hist = xr.Dataset({'temp': (('time','lat','lon'),bias_corrected_results_hist)},coords={'lat': lats,'lon': lons,'time':hist_Dict['time'] })
ds_sspliG = xr.Dataset({'temp': (('time',bias_corrected_results_liG)},'time':liG_Dict['time'] })
ds_hist.to_netcdf('hist_temp_cor.nc')
ds_sspliG.to_netcdf('liG_temp_cor.nc')
对于尺寸为 420(时间)、360(纬度)和 720(经度)的输入文件,这需要大约 1.5 小时。有没有办法让代码更高效?循环遍历每个网格点使它变得如此缓慢,但我不知道如何解决这个问题。
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
以上是大佬教程为你收集整理的在 python 中在 xarray 上应用 R 函数 qmap 加速全部内容,希望文章能够帮你解决在 python 中在 xarray 上应用 R 函数 qmap 加速所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。