Functions for Statistics
/*
* Copyright WizTools.org
* Licensed under the Apache License, Version 2.0:
* http://www.apache.org/licenses/LICENSE-2.0
*/
//package org.wiztools.commons;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
*
* @author subWiz
*/
public final class Statistics {
private Statistics() {}
private static final String LOG_ARRAY_LENGTH_0 = "Length of array cannot be 0!";
/* MEAN */
public static int mean(final int[] list) throws IllegalArgumentException {
if(list.length == 0) {
throw new IllegalArgumentException(LOG_ARRAY_LENGTH_0);
}
int sum = 0;
for(int n: list) {
sum += n;
}
return sum / list.length;
}
public static long mean(final long[] list) throws IllegalArgumentException {
if(list.length == 0) {
throw new IllegalArgumentException(LOG_ARRAY_LENGTH_0);
}
long sum = 0;
for(long n: list) {
sum += n;
}
return sum / list.length;
}
public static float mean(final float[] list) throws IllegalArgumentException {
if(list.length == 0) {
throw new IllegalArgumentException(LOG_ARRAY_LENGTH_0);
}
float sum = 0;
for(float n: list) {
sum += n;
}
return sum / list.length;
}
public static double mean(final double[] list) throws IllegalArgumentException {
if(list.length == 0) {
throw new IllegalArgumentException(LOG_ARRAY_LENGTH_0);
}
float sum = 0;
for(double n: list) {
sum += n;
}
return sum / list.length;
}
/* MEDIAN */
public static int median(final int[] list) throws IllegalArgumentException {
if(list.length < 1) {
throw new IllegalArgumentException();
}
Arrays.sort(list);
if((list.length % 2) == 0) { // is even
final int idx = list.length / 2;
return (list[idx] + list[idx-1]) / 2;
}
else { // is odd
final int idx = list.length / 2;
return list[idx];
}
}
/* MODE */
private static class ModeCompute <T extends Number> {
private Map<T, Integer> map = new HashMap<T, Integer>();
private int maxFrequency = 0;
void add(T t) {
final int count = (map.get(t) == null)? 1: (map.get(t) + 1);
// Update map:
map.put(t, count);
// Update maxFrequency:
if(count > maxFrequency)
maxFrequency = count;
}
List<T> getMode() {
List<T> out = new ArrayList<T>();
for(Map.Entry<T, Integer> entry: map.entrySet()) {
if(entry.getValue() == maxFrequency) {
out.add(entry.getKey());
}
}
return out;
}
}
public static int[] mode(final int[] list) throws IllegalArgumentException {
if(list.length == 0) {
throw new IllegalArgumentException(LOG_ARRAY_LENGTH_0);
}
final ModeCompute<Integer> modeComp = new ModeCompute<Integer>();
for(int i=0; i<list.length; i++) {
modeComp.add(list[i]);
}
final List<Integer> l = modeComp.getMode();
// Prepare the output array:
final int[] out = new int[l.size()];
Iterator<Integer> itr = l.iterator();
for(int i=0; i<out.length; i++) {
out[i] = itr.next();
}
return out;
}
}
Related examples in the same category