4

如何计算Java中数组的标准占卜?正如你所看到的,我已经计算了平均值,而且我知道最后我必须除以样本量减去 1 (n-1) 并将该数字平方。我遇到的问题是如何取每个数字并计算它与平均值的距离,然后对该数字求平方。我知道我可以分别计算数据集中的每个数字,但必须有一种更简单的方法。任何帮助将不胜感激,这是我的代码。

public class CalculateArray
{

    public static void main(String[] args)
    {
        int [] numbers = new int[]{1,2,3,4,5,6,7,8,9};

        int sum = 0;
        int max = 0;
        int min = numbers[0];
        double sd = 0;
    
        for(int i=0; i<numbers.length; i++)
        {
            sum = sum + numbers[i];
        }

        double average = sum / numbers.length;

        System.out.println("Average value is : " + average);

        for(int i=0; i<numbers.length; i++)
        {
            if(numbers[i] > max)
            {
                max = numbers[i];
            }
        }

        System.out.println("max number is : " + max);

        for(int i=0; i<numbers.length; i++)
        {
            if(numbers[i] < min)
            {
                min = numbers[i];
            }
        }

        System.out.println("min number is : " + min);

        for (int i=0; i<numbers.length;i++)
        {
           //this is where im having problems
           sd = ???
        }

        double standardDeviation = math.sqrt(sd/(numbers.length-1));

        System.out.println("The standard deviation is : " + standardDeviation);
    }
}
4

3 回答 3

8

要计算一个数字与平均值的距离,请使用-运算符。要计算平方,您可以使用Math.pow. 因此,假设您已经average在程序的前面计算过:

for (int i=0; i<numbers.length;i++)
{
    sd = sd + Math.pow(numbers[i] - average, 2);
}

顺便说一句,您当前计算平均值的方式被打破了。您应该定义sum为 double,而不是int.

于 2013-02-12T18:21:33.970 回答
1

除了其他人描述的两遍算法(在第一遍中计算平均值,在下一遍中计算标准开发),请参阅此链接以获取如何在单遍中完成的示例。算法如下:

double std_dev2(double a[], int n) {
    if(n == 0)
        return 0.0;
    double sum = 0;
    double sq_sum = 0;
    for(int i = 0; i < n; ++i) {
       sum += a[i];
       sq_sum += a[i] * a[i];
    }
    double mean = sum / n;
    double variance = sq_sum / n - mean * mean;
    return sqrt(variance);
}

更新
不要这样做。正如 Joni 在下面的评论中解释的那样,在实现这是一个计算机程序时,出错的风险很高。对于一个稳定的在线算法,Joni 将我们引导到这篇 Wikipedia 文章,如前所述,该文章已被彻底分析。

于 2013-02-12T18:47:23.827 回答
0
k + k = 2k

要获得平均值,请除以2k您拥有的术语数。所以项的平均值是k。:D

于 2014-11-18T17:53:21.603 回答