【问题标题】:Cumsum returning a vector in pythonCumsum在python中返回一个向量
【发布时间】:2021-01-26 14:44:04
【问题描述】:

我有我的数组,比如:[10, 6, 4, 12]。 我有兴趣找到一个累积和的向量,即: [10、16、20、32]。 明显的方法是使用 for 循环:

r = []
for ind in range(4):
  r.append(s[ind])  # s is [10, 6, 4, 12]
r = cumsum(r)

但是,这似乎效率很低。我想问一下是否有预定义的函数或者我应该在cumsum中指定具体的参数。

【问题讨论】:

  • 我想我不明白;您发布的代码是否应该是您尝试实施 cumsum?如果没有,您不需要以那种奇怪的方式制作副本;你可以直接使用s。但如果问题只是“scipy 是否已经为我实现了cumsum”,那么答案是 a) 如果你不知道,那么你是怎么想出这个名字的??? b) 您是否尝试将scipy cumsum 放入搜索引擎???
  • 无论如何,我希望你明白,[10, 6, 4, 12] 不是一个“数组”,也不是一个“向量”;它是一个(内置)列表
  • @KarlKnechtel 是的,我应该有我的数据,只是试着做一个玩具例子。我认为答案满足了我的疑问。

标签: python arrays loops scipy cumsum


【解决方案1】:

Libless 解决方案:

s = [10, 6, 4, 12]
r = [sum(s[:i+1]) for i in range(len(s))]

输出:

[10, 16, 20, 32]

【讨论】:

  • 请注意,这是 O(N^2) 复杂度,您只想对小列表执行此操作
【解决方案2】:

有很多方法,比如np.cumsum 或 python 3.2+ 你可以使用itertools.accumulate

通过 Itertool:

l = [10, 6, 4, 12]

from itertools import accumulate

print(list(accumulate(l)))

输出:

[10, 16, 20, 32]

使用 numpy:

import numpy as np

print(np.cumsum(l))

输出:

[10, 16, 20, 32]

【讨论】:

    猜你喜欢
    • 2014-01-06
    • 2014-12-16
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多