【问题标题】:How do you calculate the variance, median, and standard deviation in C++ or Java? [duplicate]如何计算 C++ 或 Java 中的方差、中位数和标准差? [复制]
【发布时间】:2011-12-20 18:28:06
【问题描述】:

可能重复:
Simple statistics - Java packages for calculating mean, standard deviation, etc

我有一些双精度数 (1.1,2,3,5) 的向量。如何计算方差、中位数和标准差?

Java 或 C++ 甚至伪代码都可以。

【问题讨论】:

  • 这些算法可以根据它们的定义轻松实现: - Variance - Median - Mean - Standard deviation 也许我只是不明白这个问题,但你应该没问题如果您按照这些文章中的说明进行操作。
  • [已回答 Java][1] [1]:stackoverflow.com/questions/1735870/…
  • 您应该始终展示自己在回答问题时的真诚努力。对于[homework] 问题尤其如此!请加倍努力!
  • Variance in C++。如果没记错的话,标准差是方差的平方根。 std::nth_element 可以找到中位数。对于平均使用 std::accumulatewhatever.size()
  • 这不应被标记为重复。这个问题要求代码。 “重复”问题要求图书馆...

标签: java c++ math


【解决方案1】:
public class Statistics {
    double[] data;
    int size;   

    public Statistics(double[] data) {
        this.data = data;
        size = data.length;
    }   

    double getMean() {
        double sum = 0.0;
        for(double a : data)
            sum += a;
        return sum/size;
    }

    double getVariance() {
        double mean = getMean();
        double temp = 0;
        for(double a :data)
            temp += (a-mean)*(a-mean);
        return temp/(size-1);
    }

    double getStdDev() {
        return Math.sqrt(getVariance());
    }

    public double median() {
       Arrays.sort(data);
       if (data.length % 2 == 0)
          return (data[(data.length / 2) - 1] + data[data.length / 2]) / 2.0;
       return data[data.length / 2];
    }
}

【讨论】:

  • 为什么中值对其他数据不起作用?
  • @JW8:不,这不是一个很好的实现示例。为什么sizedouble 类型? median() 的实现也很可怕。他复制和排序整个数据结构只是为了找到中位数:/。您应该使用快速选择等选择算法
  • @fireboot 随意提供上述实现。我尽量保持简单。
  • 这个实现的一个问题是,如果你想要所有三个,你将对数据进行三个传递。
  • 我试过这个,我得到的结果与 WolframAlpha 输出不匹配。均值是正确的,但方差不是。我在计算时使用了data.length - 1 而不是size,得到了正确的结果pastebin.com/AHA4zkyT
【解决方案2】:

要计算平均值,请遍历数字列表/数组,跟踪部分和和长度。然后返回sum/length

double sum = 0.0;
int length = 0;

for( double number : numbers ) {
    sum += number;
    length++;
}

return sum/length;

方差的计算方式类似。标准差就是方差的平方根:

double stddev = Math.sqrt( variance );

【讨论】:

    猜你喜欢
    • 2020-01-28
    • 2017-09-26
    • 2012-02-24
    • 2015-01-20
    • 2017-09-11
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 2019-02-15
    相关资源
    最近更新 更多