【问题标题】:How to calculate standard deviation using JAVA [closed]如何使用 JAVA 计算标准差
【发布时间】:2013-08-22 20:49:37
【问题描述】:

我是新来的, 目前我正在尝试用Java计算标准偏差(我已经用谷歌搜索了哈哈) 但我在让它工作时遇到了很多问题

我有十个用户输入的值,然后我必须计算标准差 到目前为止,我的理解感谢回复的人 是 我找到了数组的平均值 然后完成计算

                double two = total[2];
                double three = total[3];
                double four = total[3];
                double five = total[4];
                double six = total[6];
                double seven = total[7];
                double eight = total[8];
                double nine = total[9];
                double ten = total[10];

                double eleven = average_total;


mean = one + two + three + four + five + six + seven + eight + nine + ten + eleven;

mean = mean/11;
//one = one - mean;
//System.out.println("I really hope this prints out a value:" +one);
*/
 //eleven = average_total - mean;
 //eleven = Math.pow(average_total,average_total);
 //stand_dev = (one + two + three + four + five + six + seven + eight + nine + ten + eleven);
 //stand_dev = stand_dev - mean;
// stand_dev = (stand_dev - mean) * (stand_dev - mean);
// stand_dev = (stand_dev/11);
// stand_dev = Math.sqrt(stand_dev);

我的数据已经存储在一个包含 10 个值的数组中,但我不太确定 如何从数组中打印数据然后进行计算而不必在此处存储输入代码 我在其他地方操作过的数据

感谢您的宝贵时间,非常感谢 :)

【问题讨论】:

  • 显示你目前拥有的代码。
  • 双一 = 总计[1];双二=总计[2];双三=总计[3];双四=总计[3];双五=总计[4];双六=总计[6];双七 = 总计[7];双八=总计[8];双九 = 总计[9];双十 = 总计[10];双十一 = average_total;
  • 平均 = 一 + 二 + 三 + 四 + 五 + 六 + 七 + 八 + 九 + 十 + 十一;平均值=平均值/11;十一 = average_total - 平均值;十一 = Math.pow(average_total,average_total); stand_dev =(一+二+三+四+五+六+七+八+九+十+十一); stand_dev = stand_dev - 意思; stand_dev = (stand_dev - mean) * (stand_dev - mean);站立开发 = (stand_dev/11-1); stand_dev = Math.sqrt(stand_dev);
  • 抱歉,格式太差了
  • 你在循环课上睡着了,对吧?

标签: java arrays standard-deviation


【解决方案1】:

有一个简单的公式可以用来快速计算每次相加时的标准差。下面是一些实现该公式的代码,假设 total[] 已经被声明和填充:

double powerSum1 = 0;
double powerSum2 = 0;
double stdev = 0;

for i = 0 to total.length {
    powerSum1 += total[i];
    powerSum2 += Math.pow(total[i], 2);
    stdev = Math.sqrt(i*powerSum2 - Math.pow(powerSum1, 2))/i;
    System.out.println(total[i]); // You specified that you needed to print 
                                  // each value of the array
}
System.out.println(stdev); // This could also be placed inside the loop 
                           // for updates with each array value.

这个公式的美妙之处在于,您不必在每次添加新值时重新处理整个数组,也不必存储数组的任何旧值,只需在上面的代码。

【讨论】:

  • 这个非常简单易懂!谢谢,我在 for 循环中遇到了一个错误,但非常感谢!
  • 我并没有真正编译和运行代码,只是把它写出来作为这个概念的一个例子。你能解决问题吗?如果是这样,请随时编辑帖子以显示更正后的代码。此外,总是欢迎投票!
  • 使用上述方法的警告 - 由于复合浮点错误,容易出现更大的准确性错误。
【解决方案2】:
  calculate mean of array.

  loop through values

       array value = (indexed value - mean)^2    

  calculate sum of the new array.

  divide the sum by the array length

  square root it 

编辑:

我将向您展示如何循环遍历数组,所有内容几乎都是相同的步骤,只是计算方式不同。

// calculating mean.

int total = 0;

for(int i = 0; i < array.length; i++){
   total += array[i]; // this is the calculation for summing up all the values
}

double mean = total / array.length;

编辑2:

阅读您的代码后,您做错的部分是您没有循环遍历值并正确减去平均值。

又名这部分。

11 = average_total - 平均值;
十一 = Math.pow(average_total,average_total);

你需要这样做。

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

基本上你需要用 newvalue = oldvalue - mean(average) 来改变数组中的每个值。

然后计算总和...然后平方根。

【讨论】:

  • 谢谢!我会看看这样做,很好的建议:)
  • @prgenhard 感谢您的所有意见,这对您有很大帮助!我已经删除了旧代码,如果我做得正确,我应该能够用更少的代码行更快地完成它这是我到目前为止所拥有的
  • for (int j = 1; j
  • 对不起,当我评论它时,它的格式很糟糕,我需要做的是:遍历数组,将值相加,然后除以数组中的值的数量......这将得到意思是然后我可以按照您上面所说的进行处理?抱歉,如果我似乎没有完全了解这一切
  • 数组从 0 开始而不是 1,所以当你执行 total[j] 时,索引 0 处会有一个缺失值。我会养成在数组索引 0 处初始化的习惯(数组 [0] )。此外, score1 是一个单一的 int ,所以你不能在那里有一个 j 。数组基本上是在实体中索引的一堆单个整数(或您想要的任何对象)。阅读此en.wikipedia.org/wiki/For_loopen.wikipedia.org/wiki/Array 以获得更多说明,并按照我的示例进行操作。学习循环和数组是非常必要的,一旦你理解了,编程就不那么抽象了。
【解决方案3】:

我不会为你解决你的问题,因为这看起来很像你的工作,但我会尝试通过提供一些伪代码来为你提供一些帮助,为你指明正确的方向:

Loop over array i=1 to 10
    Add each element to some other variable Total
End of Loop

Average = Total / 10 (required for your std. dev. equation)

现在您需要找到元素与平均值的距离。简单

Loop over array i = 1 to 10
    Replace each element with its distance from Average Squared
    Add to some variable differenceTotal
End of Loop

然后你有你的分子和分母项,你的解决方案应该是显而易见的。希望这有点清楚和有帮助。

【讨论】:

  • 谢谢!这使它更清楚:)
【解决方案4】:

试试这个

import java.io.IOException;

public class StandardDeviationCalc {
    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
        double [] values = {9, 2, 5, 4, 12, 7, 8, 11, 9, 3, 7, 4, 12, 5, 4, 10,
                            9, 6, 9, 4 };   //change input values here
        double sum=0;
        double finalsum = 0;
        double average = 0;

        for( double i : values) {
            finalsum = (sum += i);
        }

        average = finalsum/(values.length);
        System.out.println("Average: "+ average);

        double sumX=0;
        double finalsumX=0;
        double[] x1_average = new double[2000];
        for (int i = 0; i<values.length; i++){
            double fvalue = (Math.pow((values[i] - average), 2));
            x1_average[i]= fvalue;
            System.out.println("test: "+ fvalue);
        }

        for(double i : x1_average) {
            finalsumX = (sumX += i);
        }

        Double AverageX = finalsumX/(values.length);
        System.out.println("E(X1-x1_average)^2/AverageX: "+ AverageX);
        double SquareRoot = Math.sqrt(AverageX);
        System.out.println("Standard Deviation: "+ SquareRoot);
    }
}

您可以调整您想要的方式,例如添加用户输入。代码很粗糙,因为我认为这是一个家庭作业。试着用你自己的方式让它变得美好。希望对你有帮助。

【讨论】:

    【解决方案5】:

    你试过什么?...

    您将需要循环这些值,例如打印所有值

    for(int i = 0; i < yourArray.length; i++)
    {
         System.out.println(yourArray[i]);
         // Add your code to calculate the values you need for standard dev
    }
    

    【讨论】:

    • 我尝试手动将数组值分配给变量,然后手动写出等式,但我没有接近结果,尝试编辑/发布代码但遇到问题
    • 确保您使用double 而不是int 用于您正在执行的任何部门,否则您将收到舍入错误
    猜你喜欢
    • 2020-01-28
    • 2017-09-26
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    • 2016-04-14
    • 2022-01-21
    • 1970-01-01
    • 2021-05-08
    相关资源
    最近更新 更多