从两个指数之间获得double []的平均值

时间:2010-01-15 13:59:16

标签: c# .net arrays average

我有一个包含许多数字的double []数组。

我有一个算法可以从这个数组中选择属于某些条件的部分(值大于x,至少是y值等)

现在我想在我的部分计算所有这些值的平均值。

所以,说我的部分是从索引20到40.现在我有20个值。有没有一种简单的方法可以在C#中执行此操作,还是我必须遍历我的数组并手动计算平均值?

6 个答案:

答案 0 :(得分:8)

var values = new[] { 1, 2, 3, 4, 5, 6, 7, 8 };
var average = values.Skip(2).Take(5).Average();

答案 1 :(得分:1)

使用Linq:

var myList = new double[] {1,2,3}
var avg = myList.Where(i => i > 1 && i < 2).Avg();

答案 2 :(得分:1)

请注意,如果你的数字索引为20到40,那么你没有20个数字,你有21个数字。

您可以使用Range方法为索引创建IEnumerable,然后您可以使用Average方法获取数字的平均值:

double average = Enumerable.Range(20, 21).Select(i => numbers[i]).Average();

答案 3 :(得分:0)

使用Enumerable.Average

double[] values = new[] { 1.0, 2.0, 3.14, 2.71, 9.1 };
double average = values.Where(x => x > 2.0 && x < 4.0).Average();

因此,要在选择方法中使用它,您应该考虑让这些方法返回IEnumerable<double>。所以,作为一个例子:

public IEnumerable<double> GreaterThan(double[] values, double value) {
    for(int i = 0; i < values.Length; i++) {
        if(values[i] > value) {
            yield return values[i];
    }
}

然后:

// values is double[]
double average = GreaterThan(values, 2.0).Average();

你甚至可以将上面的扩展方法设为好看,以便:

double average = values.GreaterThan(2.0).Average();

我建议您编写过滤方法以返回IEnumerable<double>

答案 4 :(得分:0)

您可以使用linq的skip和take方法来选择特定的索引:

var myData = new double[] { ..... };
var average = myList.Skip(20).Take(21).Average();

答案 5 :(得分:0)

double avg = array
    .Skip(startIndex)
    .Take(endIndex - startIndex + 1)
    .Average();