【问题标题】:How to calculate variance with C++?如何用 C++ 计算方差?
【发布时间】:2020-08-01 16:37:47
【问题描述】:

这是我目前所拥有的。我无法获得正确的方差。

variance += ((numbers[i] - (double)mean) * (numbers[i] - (double)mean));
variance /= (double)size;
cout << "The variance is: " << variance << endl;

【问题讨论】:

  • 为什么是整数?
  • 总/大小将向下舍入
  • 你为什么不使用numbers[0]

标签: variance


【解决方案1】:

您的代码存在多个问题,所有这些问题都导致方差错误。

  1. 您正在计算循环中的方差,同时更新每次迭代的平均值(在您获得正确的平均值之前)。虽然这将导致在循环结束时将正确的均值存储在 mean 变量中,但在除最后一次迭代之外的所有迭代中,方差都将以不正确的均值计算。 您需要所有的平均值之前你开始从数组中减去它来计算方差。解决方案将是在原始循环之后计算方差的另一个循环,此时您已经有了正确的平均值。

  2. 数组索引从 0 开始,但您从 1 开始,这意味着数组中的第一个数字将始终为 0,并且您正在计算 9 个数字而不是 10 的均值和方差,但除以 10。

  3. 平均值是一个整数,但用于存储浮点(或双精度)数字。此外,total / size 将向下取整,因为它们都是整数,因此您应该将其中一个转换为 double。

【讨论】:

    【解决方案2】:

        variance += ((numbers[i] - (double)mean) * (numbers[i] - (double)mean));
    

    在另一个 for 循环中的第一个 for 循环之外。 而且代码会变成这样-

    #include <iostream>
    using namespace std;
    
    int main()
    {
     int arraySize = 10;
     int numbers[10];
     int input, total = 0, size = 0, mean = 0;
     double variance = 0;
     for (int i = 1; i < arraySize; i++) {
        cout << "Enter number " << i << " (-1 to end): ";
        cin >> input;
        if (input == -1) {
            break;
        }
        else {
            numbers[i] = input;
        }
        total += numbers[i];
        size++;
        
        mean = total / size;
        
           
    }
    for(int i=1; i<=size;i++)
    variance += ((numbers[i] - (double)mean) * (numbers[i] - (double)mean));
    
    variance /= (double)size;
    cout << "The mean is: " << mean << endl;
    cout << "The variance is: " << variance << endl;
    }
    

    在计算方差时,您需要数组中所有数字的平均值,而不是每次输入后的平均值。

    【讨论】:

      猜你喜欢
      • 2020-02-05
      • 2017-04-04
      • 2012-10-30
      • 1970-01-01
      • 2019-02-15
      • 2011-05-23
      • 2014-04-19
      • 1970-01-01
      相关资源
      最近更新 更多