簡體   English   中英

任何大小的數組java的標准偏差

[英]standard deviation of any sized array java

如何計算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);
    }
}

要計算數字與平均值的距離,請使用-運算符。 要計算平方,您可以使用Math.pow 因此,鑒於您已經在程序的早期計算了average

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

順便說一句,您當前計算平均值的方式已被破壞。 您應該將sum定義為 double ,而不是int

除了其他人描述的兩遍算法(計算第一遍的平均值和下一遍的 std dev )之外,請參閱此鏈接以獲取有關如何在單遍中完成的示例。 算法如下:

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 文章,如前所述,該文章已經過徹底分析。

k + k = 2k

要獲得平均值,請將2k除以您擁有的術語數。 所以這些項的平均值是k。 :D

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM