【问题标题】:How to get partial cumulative sums (of positive and negative numbers) in an array? [closed]如何获得数组中的部分累积和(正数和负数)? [关闭]
【发布时间】:2022-11-28 05:28:50
【问题描述】:

我有一个包含正数和负数的数组,我想对相同符号的数字进行累加,直到下一个数字带有相反的符号。它再次从 0 开始。也许最好用一个示例来解释。 这是原始数组:

np.array([0.2, 0.5, 1.3, 0.6, -0.3, -1.1, 0.2, -2.0, 0.7, 1.1, 0.0, -1.2])

我期望的输出没有当然,使用循环:

np.array([0.0, 0.0, 0.0, 2.6, 0.0, -1.4, 0.2, -2.0, 0.0, 0.0, 1.8, -1.2])

任何有效的想法都会有很大帮助......

【问题讨论】:

  • 您直接使用该输出格式吗?
  • 你如何处理0?作为正数?
  • 0 为正,如示例中所示

标签: python arrays numpy sum cumulative-sum


【解决方案1】:

一个矢量选项:

a = np.array([0.2, 0.5, 1.3, 0.6, -0.3, -1.1, 0.2, -2.0, 0.7, 1.1, 0.0, -1.2])

cs = np.cumsum(a)
idx = np.nonzero(np.r_[np.diff(a>0), True])
out = np.zeros_like(a)

out[idx] = np.diff(np.r_[0, cs[idx]])

输出:

array([ 0. ,  0. ,  0. ,  2.6,  0. , -1.4,  0.2, -2. ,  0. ,  1.8,  0. ,  -1.2])

【讨论】:

  • 谢谢 mozway,它按预期工作。您将如何处理 a 数组 (-1.2) 中的最后一个元素,以便它出现在 out 数组中?
  • @tibibou 查看更新
  • 谢谢 mozway,它适用于我的原始数据和 a = np.array([0.2, 0.5, 1.3, 0.6, -0.3, -1.1, 0.2, -2.0, 0.7, 1.1, 0.0, -1.2, -1.6] ).不幸的是,如果最后 2 个数字具有不同的符号,则它不起作用:a = np.array([0.2, 0.5, 1.3, 0.6, -0.3, -1.1, 0.2, -2.0, 0.7, 1.1, 0.0, -1.2, 1.6]) 我可以在末尾加一个0,1.6之后就可以了。稍后我可以将其删除,但我怀疑有更聪明的方法......
  • @tibibou 你能再检查一下吗?
猜你喜欢
  • 1970-01-01
  • 2019-09-06
  • 1970-01-01
  • 2022-11-28
  • 2012-05-25
  • 1970-01-01
  • 2021-11-27
  • 2023-01-20
  • 2013-08-31
相关资源
最近更新 更多