0

我需要outputs使用inputs以下公式计算:

Output(i) = inputs(i) * factor + outputs(i - 1) * (1 - factor)

我使用for循环和 MoreLinq 的Scan扩展实现了这一点:

Int32 p = 5;

Decimal factor = (Decimal) 2 / (p + 1);

List<Decimal?> inputs = Enumerable.Range(1, 40).Select(x => (Decimal?)x).ToList(); 

// Using Scan extension  

List<Decimal?> outputs1 = inputs.Scan((x, y) => x * factor + (y * (1 - factor)) ?? 0).ToList(); 

// Using for loop

List<Decimal?> outputs2 = new List<Decimal?> { inputs[0] };

for (int i = 1; i < inputs.Count(); i++) 
  outputs2.Add(inputs[i] * factor + (outputs2[i - 1] * (1 - factor)) ?? 0);

但是,我得到不同的输出结果。我错过了什么?

我使用Scan不正确吗?

4

1 回答 1

2

您正在以错误的顺序解释transformation函数的参数(查看源代码以了解如何transformation调用)。将您的代码更改为:

inputs.Scan((x, y) => y * factor + x * (1 - factor) ?? 0).ToList()

x是聚合器,即先前的值,y 是当前值。

于 2021-05-21T19:01:52.183 回答