一次查找一个元素数组的平均值

时间:2011-01-20 12:40:48

标签: numbers average

我有一系列数字,这些数字是股票的价格,如下所示:

double[] xyz=new double{ 10.1, 20.34, 35.46, 78.34, 98.67, 43.73 ........} 

现在,我想根据时间找到股票的平均值:

  

第1分钟=平均值(10.1)= 10.1

     

第2分钟=平均值(10.1 + 20.34)= 15.22

     

第3分钟=平均值(10.1 + 20.34 + 35.46)= 21.96

这样做的一种方法是循环分钟次数(1,2,3,4 ...)并找到平均值。但是,由于我的列表非常庞大,这可能会成为一个性能问题。

每次都有其他方法可以找到平均值吗?

非常感谢。

马赫什

4 个答案:

答案 0 :(得分:6)

是的,保持一笔运行金额:

sum = 0;
num = 0;

foreach (element i)
{
    sum += i;
    num ++;
    average = sum / num;
}

sum选择足够大的类型,使其不会溢出。

答案 1 :(得分:2)

您可以使用以下递归公式在O(n)(单次通过)中计算它们:

An表示第n分钟平均值,Vn - 第n分钟价格。

An = (An-1 * (n - 1) + Vn) / n

所以你循环并保留以前的An

PS :如果我理解正确你想找到每分钟的平均价格,而不是单一的平均价格。

答案 2 :(得分:0)

你需要某种形式的持久性。

也许是一个对象?包含计数器和求和字段的AverageObj。

答案 3 :(得分:0)

double[] xyz=new double{ 10.1, 20.34, 35.46, 78.34, 98.67, 43.73 ........ }

double[] averages = new double[xyz.Length];

averages[0] = xyz[0];
for(int i = 1; i < xyz.Length; i++)
{
  averages[i] = (((averages[i-1] * i) + xyz[i])/i+1);
}