【问题标题】:Python - xarray mean between two netcdf filesPython - 两个netcdf文件之间的xarray平均值
【发布时间】:2020-12-15 18:31:03
【问题描述】:

我有每年的 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',combine = 'by_coords', 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, lon: 402, 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, lon: 402, 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, lat, lon) float32 dask.array<chunksize=(365, 294, 402), meta=np.ndarray>

【问题讨论】:

  • 在我们深入探讨这里的技术解决方案之前先退后一步...如果您想要平均温度,您确定要取最小值和最大值的平均值吗?大多数将提供每日最小值和最大值(无论是观察到的温度还是模拟温度)的数据源也可能也有可用的每日平均产品。这些数据到底是什么?
  • 感谢您的评论,是的,这将是一个更好的选择。问题是我正在与电台合作,他们每天只注册 tmin 和 tmax(我不知道为什么,但他们就是这样做的)。我知道这可能不是最好的方法,但它是我能做的最好的。
  • 好吧,很公平——我只是想检查一下。
  • 您是否检查过tmintmax 数据集确实包含数据(尽管您可能会遇到延迟数据加载;如有必要,请使用tm??.load() 来避免这种情况)。最好在您的问题中包含tmintmax 的摘要,就像您为tavg 所做的那样。
  • 是的,它们都包含数据。我已经为他们添加了摘要。

标签: python python-xarray


【解决方案1】:

我认为您的问题是 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", "lon"], Tmax)},coords={"lon": lon,"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)

【讨论】:

    猜你喜欢
    • 2020-06-19
    • 2019-06-19
    • 1970-01-01
    • 2021-03-28
    • 2021-01-21
    • 2021-05-14
    • 2018-12-31
    • 2017-05-05
    • 1970-01-01
    相关资源
    最近更新 更多