【问题标题】:Average of iterative sum of arrays with nan elements [duplicate]具有nan元素的数组的迭代总和的平均值[重复]
【发布时间】:2014-05-15 17:27:12
【问题描述】:

我正在使用以下方法对包含 nan 值的数组求和:

for i in range(whatever):
    a = *something different at each cycle*
    b = np.nansum([b, a],axis=0)

#now calculate the average of b elements avoiding nan counts

ba 大小相同)。 现在,如您所见,这是迭代的,添加元素以在最后创建一个单独的 sum-array。

最后,我想计算最终b 数组中每个元素的平均值,当然,不包括计数中的nan 元素。

我发现的所有其他讨论都只考虑了两个数组,并且它们的元素的平均值是通过使用nanmean 获得的,但我认为这在这里是不可能的。

如果nansum 不是最好的方法,我也可以更改对元素求和的方式,但直到现在我都是这样做的。

那么,有没有一种简单的方法来获得从计数中排除nan 元素的最终平均值?

编辑:迭代进行了多次,而不仅仅是一次,使用a 数组(在示例中)在每个循环中更改。这就是为什么我无法使用与链接问题中相同的解决方案

【问题讨论】:

  • 在这种情况下,OP 不会迭代求和。或者,我不知道如何将这两种情况简化为相同的解决方案。
  • 你不能简单地跟踪 a 中 NaN 的数量,在循环后取 b 的总和除以非 NaN 元素的总数(len(whatever) * a.size - totalNaNs)?跨度>

标签: python arrays numpy


【解决方案1】:

您可以自己跟踪非nan 元素的数量

n = np.zeros(*shape of a*)
for i in range(whatever):
    a = *something different at each cycle*
    b = np.nansum([b, a],axis=0)
    n = np.sum([n, np.invert(np.isnan(a))],axis=0)

avg = b/n

【讨论】:

  • 这行不通。这会返回一个数字,而我需要一个包含每个元素位置的 nan 总和的数组。
  • 你说得对,我误解了你的意图。我已经更新了我的答案来做你想做的事。
猜你喜欢
  • 1970-01-01
  • 2016-06-30
  • 1970-01-01
  • 1970-01-01
  • 2017-11-07
  • 1970-01-01
  • 2016-02-07
  • 2016-04-06
  • 2019-04-24
相关资源
最近更新 更多