![](/img/trans.png)
[英]Python change xarray dimension coordinate values from netcdf column
[英]Updating xarray dimension values with numpy datetime array not working with netCDF file
一个例子:
x = xr.Dataset(
{
"temperature_c": (
("lat", "lon", "date"),
20 * np.random.rand(8).reshape(2, 2, 2),
),
},
coords={"lat": [10, 20], "lon": [150, 160], "date": [1, 2]},
)
>>> x
>>> <xarray.Dataset>
Dimensions: (lat: 2, lon: 2, date: 2)
Coordinates:
* lat (lat) int32 10 20
* lon (lon) int32 150 160
* date (date) int32 1 2
Data variables:
temperature_c (lat, lon) float64 10.98 14.3 12.06 10.9
和一个 numpy 日期时间数组:
import numpy as np
times = np.array(['2007-07-13', '2006-01-13'], dtype='datetime64')
使用x.update({"date": times})
工作正常,结果是我想要的。
>>> <xarray.Dataset>
Dimensions: (lat: 2, lon: 2, date: 2)
Coordinates:
* lat (lat) int32 10 20
* lon (lon) int32 150 160
* date (date) datetime64[ns] 2007-07-13, 2006-01-13
Data variables:
temperature_c (lat, lon) float64 10.98 14.3 12.06 10.9
在我的例子中,我读入了一个 .netcdf 文件作为 xarray,除了更大之外尺寸相似。 我的数据集如下所示:
>>> ds
>>> <xarray.Dataset>
Dimensions: longitude: 720 latitude: 361 time: 504
Coordinates:
longitude (longitude) float32 -179.5 -179.0 ... 179.5 180.0
latitude (latitude) float32 -90.0 -89.5 -89.0 ... 89.5 90.0
time (time) float64 0 1 2 3 4 5 ... 499 500 501 502 503
当我尝试做同样的事情时,使用ds.update({"time": times})
更新时间坐标会导致以下 xarray.Dataset:
>>> ds
>>> <xarray.Dataset>
Dimensions: dim_0: 504 longitude: 720 latitude: 361 time: 504
Coordinates:
time (dim_0) datetime64[ns] 1979-01-15 ... 2020-12-15
longitude (longitude) float32 -179.5 -179.0 ... 179.5 180.0
latitude (latitude) float32 -90.0 -89.5 -89.0 ... 89.5 90.0
dim_0 (dim_0) int64 0 1 2 3 4 5 ... 499 500 501 502 503
这里有什么区别? 为什么在使用加载的 in.netCDF 数据集时更新维度不起作用? 我觉得必须这样做,因为突然添加了一个dim_0
维度,但这以前没有发生过。
它不能像这样使用,因为 xarray.Dataset 仍然使用dim_0
作为维度值。 当我尝试删除维度并将时间分配为新的主要维度时,这不起作用并删除了所有数据变量。 交换维度名称也不起作用,因为它不会将dim_0
识别为有效的维度名称。
可以在此处找到源数据集。 它是 500mb。
这非常简单,在 xarray 数据集中不需要任何方法,因为这些都不起作用:
ds["time"] = ("time", times)
成功了吗
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.