微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python-xarray表示两个netcdf文件之间的平均值

如何解决Python-xarray表示两个netcdf文件之间的平均值

我每年都有nc文件,每个文件都包含每日的最低和最高温度数据。

我想做的是使用这两个变量来获得平均温度。

我认为使用xarray会更容易,我设法将所有文件合并为一个

import netCDF4 as nc
import numpy as np
import xarray

tmin = xarray.open_mfdataset('TMIN*.nc',combine = 'by_coords',concat_dim="time")


tmax = xarray.open_mfdataset('TMAX*.nc',concat_dim="time")

然后,我尝试执行以下操作:tavg = (tmax - tmin) / 2

但是我有一个空数组(如下所示):

<xarray.Dataset>
Dimensions:  (lat: 294,lon: 402,time: 25567)
Coordinates:
  * lat      (lat) float32 11.9125 11.995833 12.079166 ... 36.245834 36.329166
  * lon      (lon) float32 -119.4375 -119.354164 ... -86.104164 -86.020836
  * time     (time) datetime64[ns] 1950-01-01 1950-01-02 ... 2019-12-31
Data variables:
    *empty*

如何获取每天两个变量之间的平均值?

根据建议,以下是tmin和tmax的摘要

<xarray.Dataset>
Dimensions:  (lat: 294,time: 25567)
Coordinates:
  * lon      (lon) float32 -119.4375 -119.354164 ... -86.104164 -86.020836
  * lat      (lat) float32 11.9125 11.995833 12.079166 ... 36.245834 36.329166
  * time     (time) datetime64[ns] 1950-01-01 1950-01-02 ... 2019-12-31
Data variables:
    TMAX     (time,lat,lon) float32 dask.array<chunksize=(365,294,402),Meta=np.ndarray>


<xarray.Dataset>
Dimensions:  (lat: 294,time: 25567)
Coordinates:
  * lon      (lon) float32 -119.4375 -119.354164 ... -86.104164 -86.020836
  * lat      (lat) float32 11.9125 11.995833 12.079166 ... 36.245834 36.329166
  * time     (time) datetime64[ns] 1950-01-01 1950-01-02 ... 2019-12-31
Data variables:
    TMIN     (time,Meta=np.ndarray>

解决方法

我认为您的问题是Tmin和Tmax是数据集而不是数据数组。

如果您尝试将两个数据集加在一起,则xarray不知道如何将数据集内的变量加在一起。毕竟,您可以在一个数据集中拥有多个变量。

要解决此问题,您只需在要添加的数据集中选择变量。

import xarray as xr
import numpy as np

lon = np.arange(129.4,153.75+0.05,0.25)
lat = np.arange(-43.75,-10.1+0.05,0.25)

Tmin = 10 * np.random.rand(len(lat),len(lon))
Tmax = 10 * np.random.rand(len(lat),len(lon))


Tmin = xr.Dataset({"Tmin": (["lat","lon"],Tmin)},coords={"lon": lon,"lat": lat})
Tmax = xr.Dataset({"Tmax": (["lat",Tmax)},"lat": lat})

# Just checking the datasets are not empty
print(Tmin)
print(Tmax)

# This will return an empty array as per your example 
tavg = (Tmax+Tmin)/2
print(tavg)

# Selecting the variable should work
tavg = (Tmax['Tmax']+Tmin['Tmin'])/2
print(tavg)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。