package org.seqcode.math.stats; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Vector; public class VectorUtil { public static void mult(Vector<Double> x, double m) { int i = 0; for (i=0;i<x.size();i++) { x.set(i,x.get(i)*m); } } public static void add(Vector<Double> x,double a) { int i = 0; for(i=0;i<x.size();i++) { x.set(i,x.get(i) + a); } } public static double mean(Vector<Double> x) { double m = 0; double n = 0.0; int i = 0; for (i=0;i<x.size();i++) { if (!Double.isNaN(x.get(i))) { m = m + x.get(i); n = n + 1.0; } } return m/n; } // standard deviation public static double stdev(Vector<Double> x) { double mean = mean(x); double m = 0; double n = 0.0; int i = 0; for (i=0;i<x.size();i++) { if (!Double.isNaN(x.get(i))) { m = m + (x.get(i)-mean)*(x.get(i)-mean); n = n + 1.0; } } return Math.sqrt(m/n); } public static double sum(Vector<Double> x) { double m = 0; int i = 0; for (i=0;i<x.size();i++) { if (!Double.isNaN(x.get(i))) { m = m + x.get(i); } } return m; } public static double max(Vector<Double> x) { double m = x.get(0); int i = 0; for (i=0;i<x.size();i++) { if (!Double.isNaN(x.get(i))) { if (x.get(i) > m) { m = x.get(i); } } } return m; } public static void zeros(Vector<Double> x,int n) { x.clear(); int i = 0; for (i=0;i<n;i++) { x.add(new Double(0.0)); } } public static double correlation(Vector<Double> x,Vector<Double> y) { double v = 0.0; double vx = 0.0; double vy = 0.0; double muX = mean(x); double muY = mean(y); int i = 0; for (i=0;i<x.size();i++) { v += (x.get(i) - muX)*(y.get(i) - muY); vx += Math.pow(x.get(i) - muX,2.0); vy += Math.pow(y.get(i) - muY,2.0); } v = v/(Math.sqrt(vx)*Math.sqrt(vy)); return v; } public static double euclidean(Vector<Double> x,Vector<Double> y) { double v = 0; int i = 0; for (i=0;i<x.size();i++) { v += Math.pow(x.get(i)-y.get(i),2.0); } return Math.sqrt(v); } public static double percentile(Vector<Double> x,double p) { int rp = (int) Math.round(p*((double) x.size())); Vector<Double> y = new Vector<Double>(x); Collections.sort(y); return y.get(rp); } public static int[] sortOrder(Vector<Double> x) { int[] order = new int[x.size()]; int i = 0; Vector<DoubleSort> v = new Vector<DoubleSort>(); DoubleSort ds = null; for (i=0;i<x.size();i++) { ds = new DoubleSort(); ds.pos = i; ds.value = x.get(i); v.add(ds); } Collections.sort(v); for (i=0;i<v.size();i++) { ds = v.get(i); order[i] = ds.pos; } return order; } }