简单统计 - 用于计算均值,标准差等的Java包

Pet*_*háč 65 java math statistics packages

你能建议任何简单的Java统计软件包吗?

我不一定需要任何先进的东西.我很惊讶,似乎没有一个函数来计算java.lang.Math包中的平均值...

你们有什么用呢?


编辑

关于:

编写一个计算均值和标准差的简单类有多难?

好吧,不难.手工编码之后我才问过这个问题.但是,当我需要这些功能时,它只会增加我的Java挫折感,而不是让这些最简单的功能可用.我不记得用心计算stdev的公式:)

Joh*_*ett 80

Apache Commons Math,特别是DescriptiveStatisticsSummaryStatistics.

  • 只需点击几下就可以节省人们:DescriptiveStatistics是一个包含你在内存中发送它的所有值的东西,而且SummaryStatistics不会将它们保存在内存中. (13认同)
  • API使用`double`而不是`int`或`long`所以整数溢出不是问题.但是,它们无法处理超过"Integer.MAX_VALUE"双倍的值集. (2认同)

Pet*_*háč 22

从Java SE 8开始,平台中添加了许多类:

  • 很好,但相当蹩脚,它不提供getStd() (11认同)
  • 我无法理解为什么计算偏差的方法没有添加到IntSummaryStatistics. (3认同)

Ste*_*n C 18

只是回答这部分问题:

我很惊讶在java.lang.Math包中似乎没有计算Mean的函数...

我觉得发现这个并不让我感到惊讶.Java类库没有实现许多"有用的算法".他们没有实现一切.在这方面,它们与其他编程语言没有什么不同.

实际上,如果Sun试图在J2SE中实现太多,那将是一件坏事:

  1. 这需要更多的设计师/开发人员/技术文档时间......没有明确的"投资回报".

  2. 它会增加Java的占用空间; 例如"rt.jar"的大小.(或者如果他们试图减轻这种情况,那么会导致更多的平台复杂性......)

  3. 对于数学空间中的事物,您经常需要以不同的方式(使用不同的API)实现算法,以满足不同的需求.

  4. 对于复杂的事情,Sun可能最好不要试图"标准化"API,而是将其留给其他感兴趣/熟练的团队去做; 例如Apache人.


小智 6

import java.util.*;
public class stdevClass {
    public static void main(String[] args){
        int [] list = {1,-2,4,-4,9,-6,16,-8,25,-10};
        double stdev_Result = stdev(list);
        System.out.println(stdev(list));
    }

    public static double stdev(int[] list){
        double sum = 0.0;
        double mean = 0.0;
        double num=0.0;
        double numi = 0.0;
        double deno = 0.0;

        for (int i : list) {
            sum+=i;
        }
        mean = sum/list.length;

        for (int i : list) {
            numi = Math.pow((double) i - mean), 2);
            num+=numi;
        }

        return Math.sqrt(num/list.length);
    }
}
Run Code Online (Sandbox Code Playgroud)