如何解决在短时间内将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 举报,一经查实,本站将立刻删除。