c# - 标准偏差计算在 C# 中不起作用?

标签 c# arrays variance exponent

所以我使用这种方法来计算我的数组的标准差,但它似乎没有给我正确的值。

double numbers[] = new double[10];
double sumOfAllItems = 0;

private double total()
{
    for (int i = 0; i < numbers.Length; i++)
    {
        sumOfAllItems += numbers[i];
    }

    return sumOfAllItems;
}

public double mean()
{
    // working
    **sumOfAllItems = 0;**
    return total() / numbers.Length;
}

// numbers are from (1-10) (too lazy to type up all of them.

public double variance()
{
    // each (value - mean) squared
    double summationsTotal = 0; // (numbers[i] - mean() squared

    for (int i = 0; i < numbers.Length; i++)
    {
        summationsTotal += Math.Pow(numbers[i] - mean(), 2);
    }

    return summationsTotal / (numbers.Length - 1);
}

我手动计算了方差,结果是 9.166666。这是用于示例公式。

但是,当我在我的 GUI 上计算它时,它却给了我 866.25。这段代码有什么问题吗?

最佳答案

问题出在这里:

double sumOfAllItems = 0;

private double total()
{
    for (int i = 0; i < numbers.Length; i++)
    {
        sumOfAllItems += numbers[i];
    }

    return sumOfAllItems;
}

应该是:

double sumOfAllItems = 0;

private double total()
{
   sumOfAllItems = 0;
   for (int i = 0; i < numbers.Length; i++)
    {
        sumOfAllItems += numbers[i];
    }

    return sumOfAllItems;
}

缓存均值而不是在方差函数中重新计算它也会更有效 - 它不会改变。像这样的东西:

public double variance()
{
    // each (value - mean) squared
    double dMean - mean();
    double summationsTotal = 0; // (numbers[i] - mean() squared

    for (int i = 0; i < numbers.Length; i++)
    {
        summationsTotal += Math.Pow(numbers[i] - dMmean, 2);
    }

    return summationsTotal / (numbers.Length - 1);
}

关于c# - 标准偏差计算在 C# 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19755094/

相关文章:

c# - 如何在动态 html 表的 requirefield 验证器中显示动态。

c# - 我应该使用哪个 Fluent WCF 框架(如果有)?

c# - 在 C# 中截断

Javascript 元素标签名称未定义

generics - Kotlin 中的 "Bidirectional"类型投影/方差?

scala - 从非协变类的实例创建协变类型类的实例

c# - 围绕原点旋转一个点的正确三角法

c - 从多个 sockaddr_storage 中提取 IP 和端口到 char* 中

javascript - 不使用拼接将现有数组的元素复制到新数组?

python - 有效地计算图像python的方差