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