RX: Stateful transform of sequence, e.g. exponential moving average

后端 未结 3 2102
日久生厌
日久生厌 2021-01-05 10:52

How can you do in RX a simple, stateful transform of a sequence?

Say we want to make an exponential moving average transform of a IObservable noisySequence.

3条回答
  •  轮回少年
    2021-01-05 11:29

    Thanks! Here is a solution using Scan

        const double lambda = 0.99;
        IObservable emaSequence = noisySequence.Scan(Double.NaN, (emaValue, value) =>
            {
                if (Double.IsNaN(emaValue))
                {
                    emaValue = value;
                }
                else
                {
                    emaValue = emaValue*lambda + value*(1-lambda);
                }
                return emaValue;
            }).Select(emaValue => emaValue);
    

提交回复
热议问题