package fast.common; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.Map; import java.util.Random; public class Utility { public static void swap(ArrayList<String> dataStrs, int i, int j) { String temp = dataStrs.get(i); dataStrs.set(i, dataStrs.get(j)); dataStrs.set(j, temp); } public static void printArray(double[] array, String info) { System.out.println(info); String outStr = ""; for (int i = 0; i < array.length; i++) outStr += array[i] + "\t"; System.out.println(outStr); } public static double[] normalizedBySum(double[] values) { double[] normedValues = new double[values.length]; double sum = 0.0; for (int k = 0; k < values.length; k++) { sum += values[k]; } for (int k = 0; k < values.length; k++) { normedValues[k] = values[k] / sum; } return normedValues; } public static double[] uniformRandomArray(int dim, double lower, double upper, Random rand) { double range = upper - lower; double[] weights = new double[dim]; for (int i = 0; i < dim; ++i) { double randVal = rand.nextDouble(); weights[i] = lower + (range * randVal); } return weights; } public static double[] uniformRandomArraySumToOne(int dim, double lower, double upper, Random rand) { double range = upper - lower; double[] weights = new double[dim]; double sum = 0.0; int i = 0; for (; i < dim-1; ++i) { double randVal = rand.nextDouble(); weights[i] = lower + (range * randVal); sum += weights[i]; } weights[i] = 1 - sum; return weights; } public static double[] intToDoubleArray(int[] labels) { double[] targets = new double[labels.length]; for (int i = 0; i < labels.length; i++) { targets[i] = labels[i]; } return targets; } public void printArray(double[] oneArray) { for (int i = 0; i < oneArray.length; i++) System.out.print(oneArray[i] + "\t"); System.out.println(); } public static String doubleArrayListToString(ArrayList<Double> oneList, DecimalFormat formatter, String delimiter){ String str = ""; for (double value : oneList) str += getValidString(value, formatter) + delimiter; return str; } public static void arrayListToArray(ArrayList<Double> aList, double[] a) { for (int i = 0; i < aList.size(); i++) a[i] = aList.get(i); } public static String[] linkedHashMapToStrings(LinkedHashMap<String, Double> aMap, String delimiter){ String[] strs = {"", ""}; for (Map.Entry<String, Double> entry : aMap.entrySet()) { String key = entry.getKey(); Double value = entry.getValue(); strs[0] += key + delimiter; strs[1] += value + delimiter; } return strs; } public static String getValidString(Double value, DecimalFormat formatter){ String str = ""; if (value == null || Double.isNaN(value)) str = "NaN"; else str = formatter.format(value) + ""; return str; } }