C#实现算术平均 滤波算法 输入List<double>返回List<double>
时间: 2024-06-09 13:01:23 浏览: 168
以下是 C# 实现算术平均滤波算法的代码,输入 List<double>,返回 List<double>:
```csharp
public static List<double> ArithmeticMeanFilter(List<double> inputList, int windowSize)
{
List<double> outputList = new List<double>();
for (int i = 0; i < inputList.Count; i++)
{
if (i < windowSize - 1)
{
outputList.Add(inputList[i]);
}
else
{
double sum = 0;
for (int j = i - windowSize + 1; j <= i; j++)
{
sum += inputList[j];
}
double mean = sum / windowSize;
outputList.Add(mean);
}
}
return outputList;
}
```
相关问题
C# List求平均值
在C#中,如果你有一个`List<double>`类型的列表,想要计算其中所有元素的平均值(也称为算术平均数),你可以按照以下步骤操作:
```csharp
using System;
using System.Collections.Generic;
// 假设你有一个名为numbers的List<double>
List<double> numbers = new List<double> { 1.5, 2.7, 3.9, 4.2, 5.5 };
// 计算平均值
double average = numbers.Average();
Console.WriteLine("The average value is: " + average);
```
这里使用了`Average()`方法,它是LINQ(Language Integrated Query,即编程语言内置查询)的一部分,它会返回列表中所有数字的平均值。
如果你想手动遍历并计算,也可以这样做:
```csharp
double sum = 0;
foreach (double num in numbers)
{
sum += num;
}
average = sum / numbers.Count;
```
不过实际项目中,使用`Average()`方法更为简洁明了。
用c#写算术表达式求值
在C#中,你可以使用`System.Linq.Expressions`命名空间中的`Expression`类来动态解析和求解算术表达式。这是一个示例,展示了如何使用`LambdaExpression`和`Evaluate`方法:
```csharp
using System;
using System.Linq.Expressions;
class Program
{
public static double Evaluate(string expression)
{
// 创建一个解析器函数
Func<double, double, double> parser = CreateParser(expression);
// 提供操作数(例如用户输入的两个数字)
double num1 = 5.0;
double num2 = 3.0;
// 调用解析后的函数求值
return parser(num1, num2);
}
private static Func<double, double, double> CreateParser(string expression)
{
var expressions = expression.Split('+', '-', '*', '/').ToList();
var parameters = new[] { Expression.Parameter(typeof(double), "num1"), Expression.Parameter(typeof(double), "num2") };
var result = parameters[0];
foreach (var op in expressions)
{
switch (op)
{
case "+":
result = Expression.Add(result, parameters[1]);
break;
case "-":
result = Expression.Subtract(result, parameters[1]);
break;
case "*":
result = Expression.Multiply(result, parameters[1]);
break;
case "/":
result = Expression.Divide(result, parameters[1]);
break;
default:
throw new ArgumentException($"Invalid operator: {op}");
}
}
// 创建并编译Lambda表达式
return Expression.Lambda<Func<double, double, double>>(result, parameters).Compile();
}
static void Main(string[] args)
{
string expression = "2 * 3 + 4";
Console.WriteLine($"Result of {expression}: {Evaluate(expression)}");
}
}
```
在这个例子中,首先将表达式拆分为各个运算符,然后创建一个lambda表达式对应每个部分。最后,将所有部分组合起来形成完整的计算过程,并通过编译得到可以求值的函数。
阅读全文