【问题标题】:Using Scipy Signal to carry positive balances from previous calculation使用 Scipy Signal 携带先前计算的正余额
【发布时间】:2019-06-16 00:40:58
【问题描述】:

有没有办法使用 scipy.signal 而不是循环来模拟跟随输出?

import pandas as pd
df_in = pd.DataFrame({'Generated':[13,8,7,6],'Consume':[8,10,20,5]})
print(df_in)

   Generated  Consume
0         13        8
1          8       10
2          7       20
3          6        5

df_in['balance'] = [5,3,0,1]

如果 13 - 8 等于 5 的余额,则 5 将余额带到下一行,而 5+8-10 的余额为 3。 三进到下一行,3+7-10 产生负数,但不能进负余额。 因此,下一行 0 进位 + 6 - 5 产生 1 个余额。

print(df_in)

预期输出:

   Generated  Consume  balance
0         13        8        5
1          8       10        3
2          7       20        0
3          6        5        1

【问题讨论】:

    标签: python scipy signal-processing


    【解决方案1】:

    如果不是要求仅在余额为正时添加进位,您可以在差额上使用累加器。这个累加器可以使用lfilter来实现,从递归方程y[n+1] = y[n] + x[n]获得ba参数:

    x = df_in['Generated'] - df_in['Consume']
    df_in['balance'] = scipy.signal.lfilter([1], [1,-1], x)
    

    不幸的是,仅当余额保持正数时才添加进位会使过程非线性,scipy.signal.lfilter 无法处理。此时,您必须求助于使用循环来处理特殊情况。

    【讨论】:

    • 是的,如此接近。有什么方法可以使用信号来累积正值?
    • 嗯...我错过了您的那部分要求,这使事情变得相当复杂。 scipy.signal.lfilter 可以处理线性时不变信号,而这种累积不是。此时,您可能需要对数组进行循环。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    相关资源
    最近更新 更多