Dask 在xarray中计算互相关函数
我有一个带有Dask 在xarray中计算互相关函数,dask,python-xarray,Dask,Python Xarray,我有一个带有 Dimensions: (space: 726, time: 579) Coordinates: * space (space) MultiIndex - latitude (space) float64 -90.0 -82.5 -82.5 -82.5 -82.5 -82.5 -82.5 ... - longitude (space) float64 0.0 0.0 60.0 120.0 180.0 240.0 300.0 0.0 30.0 ...
Dimensions: (space: 726, time: 579)
Coordinates:
* space (space) MultiIndex
- latitude (space) float64 -90.0 -82.5 -82.5 -82.5 -82.5 -82.5 -82.5 ...
- longitude (space) float64 0.0 0.0 60.0 120.0 180.0 240.0 300.0 0.0 30.0 ...
* time (time) datetime64[ns] 1980-06-01 1980-06-02 1980-06-03 ...
Data variables:
mx2t (time, space) float64 -1.768 -0.6035 -1.286 -1.291 1.144 ...
dayofyear (time) int64 153 154 155 156 157 158 159 160 161 162 163 164 ...
空间变量包含纬度和经度对。我需要计算互相关函数
cij = (avg(mx2t(t-tau , i) * mx2t(t , j)) - avg(mx2t(t-tau , i))*avg(mx2t(t , j)))/(std(mx2t(t-tau , i))*std(mx2t , j) )
其中avg是期望值,std是标准偏差,i和j是空间坐标中的所有元素,tau从0到200。为此,我定义了一个函数
def c_out(i) :
c1=[]
c = np.empty(726)
c.fill(-2.0)
c[i]=0.0
for j in list(range(726)):
if i != j :
rdi = res_1.sel(space = coord[i]).to_dataframe()
rdj = res_1.sel(space = coord[j]).to_dataframe()
rdi['tj'] = rdj['t']
for tau in list(range(200)):
rdi['mx2t_stau'] = rdi['t'].shift(tau)
rdf = rdi.dropna()
rdf1 = rdf.loc[pd.date_range('1982-01-01' , '1982-12-31')]
ctemp = ((rdf1['tj']*rdf1['mx2t_stau']).mean() - rdf1['tj'].mean() * rdf1['mx2t_stau'].mean()/(rdf1['tj'].std()*rdf1['mx2t_stau'].std())
if ctemp > c[j] :
c[j] = ctemp
return c
我使用joblib来并行计算它,使用
cij = Parallel(n_jobs=28 )(delayed(c_out)(i)for i in list(range(726))
我想知道在xarray中是否有一种简单或(/和)更有效的方法来进行相同的计算 什么是更好的方法?在计算性能或算法实现方面?试着修改你的问题,以便更具体地说明你需要什么帮助。什么是更好的方法?在计算性能或算法实现方面?试着修改你的问题,以便更具体地说明你需要什么帮助。