问题描述
我需要执行一个有界限的累积求和 - 有点像电容器的充电状态。它不能超过其最大充电量,也不能低于 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。这篇文章不涉及累积和,请参阅mwe以正确使用问题
在 numpy 或 pandas 上使用矢量方法可以更快,两者都有 cumsum 操作。