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


69

您能否建议任何简单的Java统计信息包?

我不一定需要任何高级的东西。令我惊讶的是,似乎没有函数可以计算java.lang.Math包装中的平均值...

你们用来做什么?


编辑

关于:

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

好吧,不难。我只在手工编码后才问这个问题。但这只是令我沮丧的是,在我需要这些最简单的功能时,他们没有手头可用。我不记得用心计算stdev的公式:)


6
您不必记住它。任何值得一提的语言都应该使访问基本描述统计数据变得简单明了。看到人们问“编写标准偏差有多难”功能真是可笑...
Adam Hughes 2015年

Answers:


85

谢谢。我认为没有任何进一步的理由。您对Apache Commons感到满意,还是就这样,足够好,可能更好?
PeterPerháč09年

刚发现此库,正是为了计算平均值,标准差。非常容易拿起。+1
Grundlefleck

2
APIdouble不使用intlong所以整数溢出不是问题。但是,它们不能处理多于Integer.MAX_VALUE两倍的值集。
Stephen C

1
@MasterPeter-但我敢肯定您会记住Wikipedia的URL :-) :-)
Stephen C

13
只是为了给人们省去几下单击:DescriptiveStatistics是将您发送的所有值保存在内存中的一种,而SummaryStatistics不将它们保存在内存中。
Michael Rusch


18

只需回答问题的这一部分:

我很惊讶在java.lang.Math包中似乎没有函数来计算均值...

我不觉得惊讶于此。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);
    }
}

1

我认为Java中没有直接的方法和类。我们必须为我们自己构建它。根据您的要求,此代码将为您提供帮助。用Java计算标准偏差


1
约翰·保利特回答两年后回答。显然有可用的库来做到这一点。除非出于教育目的,否则我不会自己实施。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.