Python:如何找到多个3D(latlontimevalue)数据数组的回归方程?

2024-09-29 21:30:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两组数据数组代表三个坐标轴上的值(lat、lon、time);一组数据数组表示变量varA,一组表示变量varB(示例如下)。在

varA
<xarray.DataArray 'varA' (time: 32, lat: 20, lon: 18)>
array([[[... 
... ]]])
Coordinates:
 * lat      (lat) float64 4.75 4.25 3.75 3.25 2.75 2.25 1.75 1.25 0.75 0.25 ...
 * lon      (lon) float64 33.25 33.75 34.25 34.75 35.25 35.75 36.25 36.75 ...
 * time     (time) datetime64[ns] 1979-01-01 1980-01-01 1981-01-01 ...

有4个不同的双重奏瓦拉和瓦布。我做了一个散点图,显示了varA对varB的每个lat、lon和time,以及每个duo(varA1对varB1,varA2对varB2……)。,并将其可视化在1个图形上(所有数据数组都具有完全相同的坐标)。在

^{pr2}$

完整散射图函数工作正常,但现在我想为完整散射图添加一条趋势线(并找到其方程)。事实上,我想研究varA和varB之间的长期(随时间)和大规模(over lat和lon)关系;我知道varA值越高,varB值越高(无论在哪个位置或在什么时间),但是我想得到1个回归方程,相关系数和RMSE(即,量化它们的关系)。在

这可能吗?我想我需要每个单元所有vara的平均值[lat,lon,time],所有varb都是一样的;所以如下所示:

avrR = wfdei_rain * 0
avrY = wfdei_rain * 0
for t in range(varA1['time'].size) :
    for la in range(varA1['lat'].size) :
        for lo in range(varA1['lon'].size) :
            avrA[la,lo,t] = float(sum([varA1[la,lo,t],varA2[la,lo,t],varA3[la,lo,t],varA4[la,lo,t])) / 4    
            avrB[la,lo,t] = float(sum([varB1[la,lo,t],varB2[la,lo,t],varB3[la,lo,t],varB4[la,lo,t])) / 4                                
z = np.polyfit(avrA[:,:,:],avrB[:,:,:],1)
p = np.poly1d(z)
plt.plot(x,p(x))
print('y=%.6fx+(%.6f)'%(z[0],z[1])

这将给出polyfit函数的错误('expected 1D vector for x')。 我没有找到如何调整polyfit来使用DataArrays-3D,我找到了一个相关的帖子:Applying numpy.polyfit to xarray Dataset,但它对我没有帮助。在

有什么更好的方法来解决这个问题吗?在

提前谢谢!在


Tags: 数据inloforsizetimerange数组

热门问题