首页 > 解决方案 > 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循环的正确方法是什么?

标签: pythonperformancefor-loopcumulative-sum

解决方案


你不需要旧的和新的。而且你正在跳过元素 0。这有点快,但我不相信你可以消除循环。

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

推荐阅读