【问题标题】:Making DataArray return a float by default instead of a 0-dimensional array使 DataArray 默认返回浮点数而不是 0 维数组
【发布时间】:2018-04-03 11:32:24
【问题描述】:

考虑以下使用 DataArray 的示例:

In [34]: import xarray as xr

In [35]: da=xr.DataArray(np.random.rand(5,5,5), dims=['x', 'y', 'z'], coords=dict(x=range(5), y=range(5), z=range(5)))

In [36]: da.mean()
Out[36]: 
<xarray.DataArray ()>
array(0.547996)

均值运算返回的对象类型实际上是一个没有任何维度的DataArray。但是,有时这很麻烦,我希望 xarray 在那些时候返回一个好的 ol' 浮点数。这可能吗?理想情况下会有类似 `xr.options.return_mode' 或类似的东西(而不是必须在每个函数中使用额外的参数)。

【问题讨论】:

  • da.mean()[0]?
  • @StephenRauch, [0] 不能用于 0d 数组,至少不能用于 numpy。我假设xarray 的行为相同。从 0d 中提取元素需要 .item()[()] 索引。
  • @hpaulj da.mean()[()] 仍然返回一个 DataArray,但 da.mean().item() 有效(很傻,但我没有想到)。如果没有更好的结果,请考虑写一个答案,以便我可以接受。

标签: numpy python-xarray


【解决方案1】:

目前,xarray 没有 xr.options.return_mode 这样的东西。来自 xarray documentation:

xarray 努力做到自洽:对 DataArray 的操作 (resp. Dataset) 返回另一个 DataArray (resp. Dataset) 对象。在 特别是返回标量值的操作(例如索引或 应用于所有轴的平均值或总和等聚合)也将返回 xarray 对象。

不幸的是,这意味着我们有时必须在其他库中使用 xarray 时显式转换结果。

所以如果你想要一个 python 标量,这些都应该工作:

float(da.mean())

da.mean().item()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 2012-12-23
    • 2018-04-12
    • 2020-08-05
    相关资源
    最近更新 更多