【发布时间】:2020-07-02 23:07:20
【问题描述】:
我有一月份的 xarray 数据集 monthly_data 包含以下信息:
lat: float64 (192)
lon: float64 (288)
time: object (1200)(monthly data)
Data Variables:
tas: (time, lat, lon)[[[45,78,...],...]...]
我有地面真值 grnd_trth,它有 1 月份的真实数据
Coordinates:
lat: float64 (192)
lon: float64 (288)
Data Variables:
tas(lat and lon)
现在我想从 monthly_data 相对于 grnd_trth 计算每个月的平方根误差,我尝试使用循环,我想它工作正常,这是我的尝试:
rms = []
for i in range(1200):
err = 0
for j in (grnd_trth.tas[0] - monthly_data.tas[i]).values:
for k in j:
err += k**2
rms.append(err**1/2)
我只是想知道是否有更有效的方法或任何直接功能可以做到这一点?
编辑:
monthly_data.tas的输出:
xarray.Datarray 'tas': (time:1200 lat: 192 lon: 288)
array([[[45,46,45,4....],....]...]
Coordinates:
lat:
array([-90. , -89.75,...])
lon:
array([0., 1.25.,.... ])
time:
array([cftime.DatetimeNoLeap(0001-01-15 12:00:00),
cftime.DatetimeNoLeap(0002-01-15 12:00:00),
cftime.DatetimeNoLeap(0003-01-15 12:00:00), ...,
cftime.DatetimeNoLeap(1198-01-15 12:00:00),
cftime.DatetimeNoLeap(1199-01-15 12:00:00),
cftime.DatetimeNoLeap(1200-01-15 12:00:00)]
grnd_trth.tas的输出:
xarray.Datarray 'tas': (lat: 192 lon: 288)
array([[45,46,45,4....],....]
Coordinates:
lat:
array([-90. , -89.75,...])
lon:
array([0., 1.25.,.... ])
time:
array([cftime.DatetimeNoLeap(0001-01-15 12:00:00)]
但是当我只使用 .values() 函数时,它只会返回我的 tas 值数组!
【问题讨论】:
-
打印
monthly_data.zg和grnd_truth.zg时最好看看输出是什么:这有助于建立一个最小的可重现示例。 -
请检查更新的问题!
-
不错!这样可以更容易地查看问题可能出在哪里。想想你的索引;
monthly_data.tas具有(1200,192,288)的形状,所以像monthly_data.tas[0]这样的索引实际上没有意义,对吧?我觉得应该更像:monthly_data.tas[0, :, :].
标签: python python-3.x dataset python-xarray