在短时间内将1d数组与python中的每个4d数组相关联

问题描述

我有一个形状为(35,2000,60,180)的4d数组(称为a),我需要将其与长度为2000的1d数组(称为b)相关联,同时对两个数组进行去趋势和平滑处理。 / p>

我设法使用嵌套的for循环,通过遍历每个点y,z并去趋势c [x,y,]使1d数组与3d数组(称为c)shape(x,y,z)相关联: ]并存储b与该点之间的相关系数。

但是,使用3x嵌套的for循环来计算与4d数组的相关性需要花费太多时间来计算。是否有一种更有效的方法生成一个包含4d数组和1d数组中每个时间序列之间的相关系数的数组?

这是我的代码,用于仅涉及3个维度来计算相关性。在具有shape(2000,60,180)的数组上执行大约需要一分钟。

另外,较大的数组具有nan,在这种情况下,我将整个x,y点的相关性设为nan。

def correlation_detrended(cs,ts,smooth=360):

    cs_det = cs
    ts_det = ts
    signal.detrend(ts_det[~np.isnan(ts_det)],overwrite_data=True)
    ts_det = pd.DataFrame(ts_det).rolling(smooth,center=True).mean().to_numpy()[:,0]


    for i in range(len(cs_det[0,:,0])):
        for j in range(len(cs_det[0,i,:])):
            print(str(i) + ":" + str(j) )
            if np.any(np.isnan(cs_det[:,j])):
                r,p = (np.nan,np.nan)
            else:
                signal.detrend(cs_det[:,j],overwrite_data=True)
                cs_det[:,j] = pd.DataFrame(cs_det[:,j]).rolling(smooth,0]
                offset = int((smooth/2+120))
                r,p = stats.pearsonr(cs_det[offset:-(offset),ts_det[offset:-(offset)])
            correlation[i,j] = r
    return correlation```

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)