如何替换 xarray 变量中的值?
How can I replace values in an xarray variable?
我有一个 xarray 数据集 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
的值,导致此错误:
试验 1
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.
试验 2
所以,到目前为止,我已经尝试创建一个单独的 dataArray 用于合并:
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'
对替代解决方案持开放态度,或使其中一个可行。
我弄乱了调光的顺序。这有效:
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 数据集 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
的值,导致此错误:
试验 1
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.
试验 2
所以,到目前为止,我已经尝试创建一个单独的 dataArray 用于合并:
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'
对替代解决方案持开放态度,或使其中一个可行。
我弄乱了调光的顺序。这有效:
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