python中无循环的有界累积和



我需要执行一个有界的累积求和——有点像电容器的充电状态。它不能超过其最大充电量,也不能低于0。类似于:

Initial  Cumulative Sum Constrained Sum
1        1               1
7        8               8
5        13              10
-8       5               2
-7       -2              0
3        1               3

我有一段代码:

charge_0 = 0
for i in range (1, len(charge_discharge)):
charge_1 = min(battery_size,max(0,(charge_0+charge_discharge[i])))
StorageSOC.append(charge_1)
charge_0 = charge_1

它比其他一些选项工作得更快,但我知道它没有经过优化。一个简单的累积和要快几个数量级,所以我相信有更好的方法可以做到这一点。我不能只在边界处应用剪辑。在没有for循环的情况下,正确的方法是什么?

您不需要旧的和新的。您正在跳过元素0。这稍微快一点,但我不相信你能消除循环。

charge = 0
for delta in charge_discharge:
charge = min(battery_size,max(0,charge+delta))
StorageSOC.append(charge)

在示例中,j0和j1没有定义。这篇文章中没有涉及到累计数,请参考一个问题的正确使用

在numpy或pandas上使用矢量方法可以更快,两者都有cumsum运算。

最新更新