2009-11-14 14 views
61

Czy możesz zaproponować jakieś proste pakiety statystyk Java?Proste statystyki - Pakiety Java do obliczania średniej, odchylenia standardowego, itp.

Nie potrzebuję żadnych zaawansowanych narzędzi. Byłem bardzo zaskoczony, że nie wydaje się, aby funkcja obliczania średniej w pakiecie java.lang.Math ...

Co używacie do tego?


EDIT

odniesieniu do:

Jak trudno jest napisać prostą klasę który oblicza środki i odchylenia standardowe ?

Cóż, nie trudno. Zadałem to pytanie tylko po ręcznym zakodowaniu tych pytań. Dodałem jednak do mojej frustracji w Javie, że najprostsze funkcje nie były dostępne pod ręką, kiedy ich potrzebowałem. Nie pamiętam wzoru na obliczanie STDV na serce :)

+5

Nie powinno się pamiętać to na pamięć. Każdy język warty swojej soli powinien ułatwić dostęp do podstawowych statystyk opisowych. Widząc, że ludzie pytają "jak trudno jest napisać odchylenie standardowe" jest zabawne ... –

Odpowiedz

72
+0

dzięki. Rozumiem, że nie ma powodu, aby szukać dalej. Jesteś zadowolony z Apache Commons, czy może jest on taki dobry, może być lepszy? –

+0

Właśnie odkryłem tę bibliotekę, właśnie do obliczania średniej, odchylenie standardowe. Bardzo łatwo odebrać. +1 – Grundlefleck

+0

Znalazłem to, aby dobrze pasowało do moich potrzeb. Chociaż nigdy osobiście nie natknąłem się na ten problem lub nie dbałem o niego, mam współpracownika, który stwierdził, że jest wolniejszy podczas obliczania średniej z tablicy niż po prostu wykonując pętlę, aby dodać wartości, a następnie podzielić przez rozmiar tablicy. Jednak jego kod uśrednia rzeczy, które prawdopodobnie nigdy nie spowodują błędów przepełnienia liczby całkowitej. Zakładam, że Commons Math jest trochę mądrzejszy i nie pozwoli przepełnić liczb całkowitych. –

16

Podobnie reaguje na tej części pytania:

Byłem bardzo zaskoczony, że nie robi nie wydaje się być funkcja obliczyć średnią w pakiecie java.lang.Math ...

Nie sądzę, że byłem zaskoczony, że to znalazłem. Istnieje wiele "użytecznych algorytmów", których biblioteki klas Java nie implementują. Nie realizują wszystkiego. I w tym nie różnią się od innych języków programowania.

Właściwie Byłoby źle, gdyby Słońce próbował realizować zbyt wiele w J2SE:

  1. zajęłoby więcej Projektant/programista/technicznych czasu Documenter ... bez wyraźnego „zwrotu z inwestycji ".

  2. Zwiększyłoby to ślad w języku Java; na przykład rozmiar "rt.jar". (Lub gdyby próbowali to złagodzić, spowodowałoby to większą złożoność platformy ...)

  3. Do rzeczy w przestrzeni matematycznej często trzeba implementować algorytmy na różne sposoby (z różnymi API), aby zaspokoić potrzeby różne wymagania.

  4. Dla skomplikowanych rzeczy może być lepiej dla Sun, aby nie próbować "standaryzować" API, ale pozostawić to innej, zainteresowanej/wykwalifikowanej grupie, aby to zrobić; na przykład ludzie z Apache.

+0

+1 ode mnie - dobrze powiedziane. – duffymo

1

Myślę, że nie ma bezpośredniej metody i klas w java. Musimy to zbudować dla naszych własnych. Dla Twojego wymagania ten kod ci pomoże.Calculate Standard Deviation in java

+0

Odpowiedziałem dwa lata po odpowiedzi Johna Pauletta. Oczywiście są na to dostępne biblioteki. Nie wdałbym się w twoje własne, chyba że w celach edukacyjnych. – 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); 
    } 
} 
Powiązane problemy