4

Javaで配列の標準占いを計算する方法は?ご覧のとおり、私はすでに平均を計算しました。最後に、サンプルサイズから1(n-1)を引いて除算し、その数を2乗する必要があることを知っています。私が抱えている問題は、すべての数値を取得し、それが平均からどれだけ離れているかを計算し、その数値を2乗する方法です。データセットからすべての数値を個別に実行できることはわかっていますが、もっと簡単な方法が必要です。助けていただければ幸いです。これが私のコードです。

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);
}

ちなみに、現在の平均の計算方法は壊れています。sumas ではなく double として定義する必要がありますint

于 2013-02-12T18:21:33.970 に答える
1

他の人が説明した 2 パス アルゴリズム (最初のパスで平均を計算し、次のパスで 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 が以下のコメントで説明しているように、これをコンピューター プログラムに実装すると、エラーが発生するリスクが高くなります。安定したオンライン アルゴリズムについては、前述のように徹底的に分析されたこの ウィキペディアの記事を参照してください。

于 2013-02-12T18:47:23.827 に答える