使用 Java 计算标准偏差?
Calculate Standard Deviation using Java?
我有一个整数数组列表:[11, 15, 10, 19, 9, 1, 2, 16]
我似乎无法 return 正确答案。
我的代码:
static double Q2(ArrayList<Integer> input) {
Collections.sort(input);
ArrayList<Double> input2 = new ArrayList<>();
double sum = 0;
double sum2 = 0;
double sd = 0;
for (int i = 0; i < input.size(); i++) {
sum = sum + input.get(i);
}
double mean = sum / input.size();
for (int i = 0; i < input.size(); i++) {
input2.add((Math.pow((input.get(i) - mean), 2)));
}
for (int i = 0; i < input2.size(); i++) {
sum2 = sum2 + input2.get(i);
}
double mean2 = sum2 / input2.size();
sd = Math.sqrt(mean2);
return sd;
预期输出应为:5.998697775350913
我的输出是:6.010407640085654
非常感谢您的宝贵时间。
虽然在数学上是正确的,但在计算上,这是一种糟糕的计算 SD 的方法。无需先对输入进行排序。无需创建第二个数组来存储方差;您可以在一个循环中添加它们。无需调用 Math.Pow 而只是计算 z * z.
解决所有这些问题,您将尽可能地改进这种方法。但更好的方法完全是使用 online algorithm,它可以一次性完成。
最后,请注意,在很多情况下,当人们要求您计算 SD 时,他们实际上想要的是总体 SD,而不是样本 SD,这需要您将偏差平方和除以 (n-1)而不是 n.
我有一个整数数组列表:[11, 15, 10, 19, 9, 1, 2, 16] 我似乎无法 return 正确答案。
我的代码:
static double Q2(ArrayList<Integer> input) {
Collections.sort(input);
ArrayList<Double> input2 = new ArrayList<>();
double sum = 0;
double sum2 = 0;
double sd = 0;
for (int i = 0; i < input.size(); i++) {
sum = sum + input.get(i);
}
double mean = sum / input.size();
for (int i = 0; i < input.size(); i++) {
input2.add((Math.pow((input.get(i) - mean), 2)));
}
for (int i = 0; i < input2.size(); i++) {
sum2 = sum2 + input2.get(i);
}
double mean2 = sum2 / input2.size();
sd = Math.sqrt(mean2);
return sd;
预期输出应为:5.998697775350913
我的输出是:6.010407640085654
非常感谢您的宝贵时间。
虽然在数学上是正确的,但在计算上,这是一种糟糕的计算 SD 的方法。无需先对输入进行排序。无需创建第二个数组来存储方差;您可以在一个循环中添加它们。无需调用 Math.Pow 而只是计算 z * z.
解决所有这些问题,您将尽可能地改进这种方法。但更好的方法完全是使用 online algorithm,它可以一次性完成。
最后,请注意,在很多情况下,当人们要求您计算 SD 时,他们实际上想要的是总体 SD,而不是样本 SD,这需要您将偏差平方和除以 (n-1)而不是 n.