[英]Find Standard deviation for each column of array
我要找到标准偏差。 在计算标准偏差时,我的输出远高于给定的样本。 我如何 go 计算每列的标准偏差?
这是我的代码作为参考:
double[] average = new double[arrScores.length];
for (int i = 0; i < arrScores[i].length; i++) {
double sum = 0;
for (int j = 0; j < arrScores.length; j++) {
sum = sum + arrScores[j][i];
}
average[i] = sum / arrScores.length;
System.out.printf("Test#%d: %.2f with Std Deviation: \n", i, average[i]);
average[i]=0;
给出的数组如下:
100.00 90.00 100.00 80.00 70.00
50.00 60.00 70.00 80.00 100.00
60.00 70.00 100.00 80.00 90.00
69.50 70.50 80.50 30.50 0.00
78.30 69.50 48.00 90.00 100.00
88.50 95.00 100.00 99.00 0.00
要做的Output是:
Test#0 Average: 74.38 with Std Deviation: 16.81
Test#1 Average: 75.83 with Std Deviation: 12.39
Test#2 Average: 83.08 with Std Deviation: 19.44
Test#3 Average: 76.58 with Std Deviation: 21.76
Test#4 Average: 60.00 with Std Deviation: 43.59
编辑:
double Stats = 0;
double Class = 0;
double average = 0;
double[] arr=new double[arrScores.length];
for(int i = 0; i < arrScores[i].length; i++){
for(int j = 0; j < 6; j++){
average = average +array[j][i];
arr[j]=array[j][i];
}
average =average / arrScores[i].length;
for(double num; num < arrScores.length; num++){
Stats = Stats+ Math.pow(num-average,2);
}
Class=Math.sqrt(Stats / arrScores[i].length);
这是我在更改为上面的内容之前所拥有的。
在您的样本数据中,每一行代表一个学生的考试成绩,每列代表一个考试。 为了计算每个测试的平均分数,您首先需要获取每列的总分。 根据您问题中的样本数据,第一列的总数为:
100 + 50 + 60 + 69.5 + 78.3 + 88.5 = 446.3
然后将其除以参加考试的学生人数 - 因为样本数据中有六行,所以为 6。
计算平均值后,您可以计算每个测试的标准偏差。 我使用了以下公式:
对于每个测试分数(在同一列中),您减去该测试的平均值,将结果差平方并将它们加在一起。 得到这些总数后,将每个总数除以参加考试的学生人数,即 6,然后取除法结果的平方根。 这为您提供了每个测试的标准偏差。
public class Scores {
public static void main(String[] args) {
double[][] scores = {{100.00, 90.00, 100.00, 80.00, 70.00},
{ 50.00, 60.00, 70.00, 80.00, 100.00},
{ 60.00, 70.00, 100.00, 80.00, 90.00},
{ 69.50, 70.50, 80.50, 30.50, 0.00},
{ 78.30, 69.50, 48.00, 90.00, 100.00},
{ 88.50, 95.00, 100.00, 99.00, 0.00}};
double[] tests = new double[scores[0].length];
for (int row = 0; row < scores.length; row++) {
for (int column = 0; column < scores[row].length; column++) {
tests[column] += scores[row][column];
}
}
double[] averages = new double[tests.length];
for (int i = 0; i < averages.length; i++) {
averages[i] = tests[i] / scores.length;
}
double[] stdDevs = new double[averages.length];
for (int row = 0; row < scores.length; row++) {
for (int column = 0; column < stdDevs.length; column++) {
stdDevs[column] += Math.pow((scores[row][column] - averages[column]), 2);
}
}
for (int i = 0; i < stdDevs.length; i++) {
stdDevs[i] = Math.sqrt(stdDevs[i] / scores.length);
System.out.printf("Test %d average: %.2f with Std Deviation: %.2f%n",
i,
averages[i],
stdDevs[i]);
}
}
}
运行上述代码会生成以下 output:
Test 0 average: 74.38 with Std Deviation: 16.81
Test 1 average: 75.83 with Std Deviation: 12.39
Test 2 average: 83.08 with Std Deviation: 19.44
Test 3 average: 76.58 with Std Deviation: 21.76
Test 4 average: 60.00 with Std Deviation: 43.59
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.