我需要执行一个有界的累积求和——有点像电容器的充电状态。它不能超过其最大充电量,也不能低于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运算。