如何替换xarray变量中的值? [英] How can I replace values in an xarray variable?

查看:1227
本文介绍了如何替换xarray变量中的值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个xarray数据集ds

I have an xarray dataset ds

<xarray.Dataset>
Dimensions:         (elevation_band: 4, latitude: 1, longitude: 1)
Coordinates:
  * longitude       (longitude) float64 -111.4
  * latitude        (latitude) float64 44.51
  * elevation_band  (elevation_band) int32 1 2 3 4
Data variables:
    area_frac       (elevation_band, latitude, longitude) float64 0.005109 ...
    mean_elev       (elevation_band, latitude, longitude) float64 2.45e+03 ...
    prec_frac       (elevation_band, latitude, longitude) float64 0.005109 ...

我想用这些值[0.1, 0.2, 0.3, 0.4]替换mean_elev的值,从而导致此错误:

And I want to replace the values of mean_elev with these values [0.1, 0.2, 0.3, 0.4] leading to this error:

ds['mean_elev'].values = np.atleast_3d([0.1, 0.5, 0.3, 0.6]).reshape((4, 1, 1))

错误2

MissingDimensionsError: cannot set variable 'mean_elev' with 3-dimensional data without explicit dimension names. Pass a tuple of (dims, data) instead.

到目前为止,我已经尝试创建一个单独的dataArray进行合并:

So, far I have tried to create a separate dataArray for merging:

lat = ds['latitude'].values
long = ds['longitude'].values
elevation_band = ds['elevation_band'].values

mean_elev = np.array([0.1, 0.5, 0.3, 0.6]).reshape((4, 1, 1))

xr.DataArray(mean_elev, coords={'latitude': lat, 'longitude': long, 
                                'elevation_band': elevation_band},
             dims=['latitude', 'longitude', 'elevation_band'])

错误2

ValueError: conflicting sizes for dimension 'latitude': length 4 on the data but length 1 on coordinate 'latitude'

欢迎使用替代解决方案或使其中一种可行.

Open to alternative solutions or making one of these work.

推荐答案

我弄乱了暗淡的顺序.这有效:

I messed up the order of the dims. This works:

lat = ds['latitude'].values
long = ds['longitude'].values
elevation_band = ds['elevation_band'].values

mean_elev = np.array([0.1, 0.5, 0.3, 0.6]).reshape((4, 1, 1))

me = xr.DataArray(mean_elev, coords={'latitude': lat, 'longitude': long, 
                                'elevation_band': elevation_band},
             dims=['elevation_band', 'latitude', 'longitude'])
ds['mean_elev'] = me

确认

ds['mean_elev']

<xarray.DataArray 'mean_elev' (elevation_band: 4, latitude: 1, longitude: 1)>
array([[[ 0.1]],

       [[ 0.5]],

       [[ 0.3]],

       [[ 0.6]]])
Coordinates:
  * longitude       (longitude) float64 -111.4
  * latitude        (latitude) float64 44.51
  * elevation_band  (elevation_band) int32 1 2 3 4

这篇关于如何替换xarray变量中的值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆