如何让DataArray默认返回float而非0维数组?
问题:如何让xarray聚合方法返回普通float而非无维度DataArray
我在使用xarray的DataArray时遇到了一个小困扰:当调用像mean()这样的聚合方法时,返回的是一个无维度的DataArray对象,而不是我想要的普通Python float类型。比如下面的示例:
import xarray as xr import numpy as np da = xr.DataArray(np.random.rand(5,5,5), dims=['x', 'y', 'z'], coords=dict(x=range(5), y=range(5), z=range(5))) da.mean() # 输出:<xarray.DataArray ()> # array(0.547996)
有没有办法让这类聚合操作直接返回普通的float值呢?
解决方案
当然没问题!xarray给咱们提供了好几种简单的方式来搞定这个需求:
使用
.item()方法:这是最推荐的做法,专门用来从无维度的DataArray里提取Python原生的标量类型(比如float、int)。它会自动匹配数组元素的类型,用起来超简单:mean_value = da.mean().item() print(type(mean_value)) # 输出:<class 'float'>使用
.values属性:这个属性会返回DataArray底层的numpy数组,对于无维度的结果来说,返回的是一个0维numpy数组,你直接转成Python类型就行:mean_value = float(da.mean().values) # 或者也可以这么写:mean_value = da.mean().values.item()
额外提一句:如果你的聚合操作是按某个维度做的(比如da.mean(dim='x')),返回的是带维度的DataArray,那.item()就不适用了,这时候用.values拿numpy数组更合适。但像你这种全量聚合得到标量的场景,.item()绝对是最简洁直观的选择~
内容的提问来源于stack exchange,提问作者TomCho
相关产品推荐
相关产品推荐

