2009-11-14 2 views
61

Не могли бы вы предложить любые простые пакеты статистики Java?Простая статистика - пакеты Java для вычисления среднего, стандартного отклонения и т. Д.

Мне не нужен какой-либо передовой материал. Я был очень удивлен, что не существует функции для вычисления среднего значения в пакете java.lang.Math ...

Что вы, ребята, используете для этого?


EDIT

Относительно:

Как трудно написать простой класс , который вычисляет средние и стандартные отклонения ?

Ну, не сложно. Я задал этот вопрос только после того, как их вручную закодировали. Но это только добавило моему разочарованию в Java, чтобы эти простые функции не были доступны под рукой, когда они мне были нужны. Я не помню формулу для расчета stdev наизусть :)

+5

Вы не должны помнить, это наизусть. Любой язык, заслуживающий соли, должен сделать его простым для доступа к описательной статистике. Видя, как люди спрашивают, «как трудно писать стандартное отклонение», смешно ... –

ответ

72
+0

спасибо. Я так понимаю, на самом деле нет причины смотреть дальше. Вы удовлетворены Apache Commons, или это просто так, достаточно хорошо, может быть лучше? –

+0

Только что открыл эту библиотеку, точно для вычисления среднего стандартного отклонения. Очень легко подобрать. +1 – Grundlefleck

+0

Я нашел, что это хорошо соответствует моим потребностям. Хотя я никогда лично не сталкивался с этой проблемой или не интересовался, у меня есть коллега, который обнаружил, что он медленнее вычисляет среднее значение массива, чем просто делает цикл, чтобы добавить значения, а затем делить на размер массива. Тем не менее, его код усреднял то, что, вероятно, никогда не вызовет ошибки переполнения целочисленного числа. Я предполагаю, что Commons Math немного умнее и не допускает переполнения целых чисел. –

16

Только в ответ на эту часть вопроса:

Я был очень удивлен, что делает не оказаться функция вычислить среднее в пакете java.lang.Math ...

Не думаю, что я был удивлен, увидев это. Существует множество «полезных алгоритмов», которые не реализуют библиотеки классов Java. Они не реализуют все. И в этом они ничем не отличаются от других языков программирования.

На самом деле было бы плохо, если ВС были попытаться осуществить слишком много в J2SE:

  1. Это заняло бы больше дизайнера/разработчика/техническое время Архивариуса ... без четкого «возврата на инвестиции ».

  2. Это увеличило бы площадь Java; например размер «rt.jar». (Или, если они попытались смягчить это, это приведет к большей сложности платформы ...)

  3. Для вещей в математическом пространстве вам часто необходимо реализовать алгоритмы различными способами (с различными API-интерфейсами) для обслуживания различные требования.

  4. Для сложных вещей Солнцу может быть лучше не пытаться «стандартизировать» API, а оставлять его для какой-либо другой заинтересованной/опытной группы; например люди Апачи.

+0

+1 от меня - хорошо сказано. – duffymo

1

Я думаю, что нет прямого метода и классов в java. Мы должны строить его для себя. Для вашего требования этот код поможет вам.Calculate Standard Deviation in java

+0

Ответил через два года после ответа Джона Полетта. Очевидно, что для этого есть библиотеки. Я бы не реализовал свои собственные, если только в образовательных целях. – cowls

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