总结 xarray 数据数组的列表

Posted

技术标签:

【中文标题】总结 xarray 数据数组的列表【英文标题】:Summarizing a list of xarray dataarray 【发布时间】:2022-01-13 23:37:26 【问题描述】:

我有一个名称和大小具有相同维度的多个数据数组的列表,我想对所有数据数组求和并创建一个具有相同数据数组维度的单个数据数组,最好的方法是什么?

[<xarray.DataArray (latitude: 501, longitude: 894)>
 array(..., dtype=float32)
 Coordinates:
   * longitude  (longitude) float64 49.8 49.81 49.81 49.82 ... 56.98 56.99 57.0
   * latitude   (latitude) float64 27.0 27.01 27.02 27.03 ... 31.98 31.99 32.0
     year       int64 2000,
.......
.......
 <xarray.DataArray (latitude: 501, longitude: 894)>
 array(..., dtype=float32)
 Coordinates:
   * longitude  (longitude) float64 49.8 49.81 49.81 49.82 ... 56.98 56.99 57.0
   * latitude   (latitude) float64 27.0 27.01 27.02 27.03 ... 31.98 31.99 32.0
     year       int64 2020]

【问题讨论】:

“sum”是指要按元素添加数组,还是要计算数组中所有元素的总和?两者都是微不足道的。您可以使用.sum() 计算总和(这并不奇怪),您可以使用a + b 计算具有ab 的元素总和的数组。有人怎么会来 SO 并提出这样的问题而无需尝试 .sum()+ 首先让我大吃一惊。希望我误解了这个问题。 @Grismar,我编辑了我的问题。我想按元素添加数组并创建一个具有相同维度的数据数组的新数据数组。 那么,您尝试result = xrs[0]; for xr in xrs[1:]: result += xr 了吗?如果这不是你需要的,你能描述一下实际的问题吗? (顺便说一句,这只是循环列表并将其元素相加的一种方法,如果这是您需要的,那么问题根本不是关于xarray,而是关于“我如何在Python中总结一个列表" 【参考方案1】:

由于您可以使用简单的a + b 添加两个 xarrays ab elementwise,并且您说您有一个 xarrays 列表,所有这些都具有相同的尺寸(我们称之为 xrs),那么这就是您的方式'会添加所有这些:

result = xrs[0]
for xr in xrs[1:]:
    result += xr

顺便说一句,这根本不是xarray 所特有的。如果您有一个整数列表xs,并且您想添加所有整数:

result = xrs[0]
for xr in xrs[1:]:
    result += xr

只要适当地定义了加法运算符,sum(xs) 也可以正常工作。它适用于xarray

result = sum(xrs)

【讨论】:

以上是关于总结 xarray 数据数组的列表的主要内容,如果未能解决你的问题,请参考以下文章

以追加到列表为结果的多处理 for 循环

如何为 xarray 数据数组创建一个 numpy 数组?

megrid和meshgrid

数据结构与算法-线性表和散列表的总结

数据结构与算法-线性表和散列表的总结

Python----list 常用方法总结