就地更新 xarray DataArray 中的单个值?

问题描述

也许它的形式很糟糕,但是有没有办法就地更新 xarray DataArray 的单个值?我正在执行趋势分析,其中我对每个(纬度、经度)单元格进行子集化并在时间片上进行分析。

我希望能够执行以下操作:

output_array.loc[dict(lat=i,lon=j)]['intercept'] = intercept

output_array.sel(lat=i,lon=j)['intercept'] = intercept

其中 intercept 是要在 output['intercept'] DataArray 中更新的单个值(浮点数)

解决方法

xarray.DataArray 基本上是 numpy ndarray 的包装器,这意味着您可以修改底层的 numpy 数组。

您可以使用 .data.values 属性访问(和修改)数组。

import xarray as xr

# load testdata
x = xr.tutorial.load_dataset("air_temperature")

# keep second reference of array just for showcasing
arr = x.air.data

# it's the same
assert arr is x.air.data

# indices
i,j,k = (0,0)

print(x.air.data[i,k],arr[i,k])
# 241.2 241.2

# new value
x.air.data[i,k] = 0

# check
print(x.air.data[i,k])
# 0.0 0.0
,

要添加到@val 的优秀答案中,可以直接改变数组,而无需通过 .data 属性:

In [5]: x.air[i,k] = 0

In [6]: print(x.air.data[i,k])
0.0 0.0