程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在 python 中在 xarray 上应用 R 函数 qmap 加速大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决在 python 中在 xarray 上应用 R 函数 qmap 加速?

开发过程中遇到在 python 中在 xarray 上应用 R 函数 qmap 加速的问题如何解决?下面主要结合日常开发的经验,给出你关于在 python 中在 xarray 上应用 R 函数 qmap 加速的解决方法建议,希望对你解决在 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,请注明来意。