繁体   English   中英

查找数组每一列的标准差

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM