StatisticsUtilities { public static int argmin(double[] xs) { double min = Double.MAX_VALUE; ArrayList<Integer> equalMinIndexes = new ArrayList<Integer>(xs.length); for (int i = 0; i < xs.length; i++) { if (xs[i] == min) { equalMinIndexes.add(i); } else if (xs[i] < min) { min = xs[i]; equalMinIndexes.clear(); equalMinIndexes.add(i); } } return equalMinIndexes.get(CommonConstants.randomArgMaxTieBreak ? RandomNumbers.randomGenerator.nextInt(equalMinIndexes.size()) : 0); }  static double percentile(final double[] values, final double p); static double median(double[] xs); static int argmax(double[] xs); static int argmax(int[] xs); @SuppressWarnings("unchecked") static int argmax(int[] xs, int rank); static int argmin(double[] xs); static int argmin(int[] xs); static int softmax(double[] ps, double temperature); static int probabilistic(double[] ps); static double[] distribution(double[] raw); static double[] distribution(int[] raw); static double mode(double[] xs); static double mode(double[] xs, double epsilon); static double maximum(double[] xs); static int maximum(Collection<Integer> xs); static long maximum(long[] xs); static double minimum(double[] xs); static double average(double[] xs); static int sum(int[] vals); static double sum(double[] vals); static int sum(Collection<Integer> xs); static double sumDouble(Collection<Double> xs); static double populationStandardDeviation(double[] xs); static double sampleStandardDeviation(double[] xs); static double populationVariance(double[] xs); static double sampleVariance(double[] xs); static double sumOfSquares(double[] xs); static double instantaneousErrorEnergy(double desired, double output); static double instantaneousTotalErrorEnergy(ArrayList<Pair<Double, Double>> pairs); static double averageSquaredErrorEnergy(ArrayList<ArrayList<Pair<Double, Double>>> samples); static double tValue(int runs);  }
@Test public void testArgminDoubleArray() { double[] test1 = {4, 3, 2, 1}; double[] test2 = {4, 5, 5}; assertEquals(StatisticsUtilities.argmin(test1), 3); assertEquals(test1[StatisticsUtilities.argmin(test1)], 1, ERROR); assertEquals(StatisticsUtilities.argmin(test2), 0); assertEquals(test2[StatisticsUtilities.argmin(test2)], 4, ERROR); }
@Test public void testArgminIntArray() { int[] test1 = {4, 3, 2, 1}; int[] test2 = {4, 5, 5}; assertEquals(StatisticsUtilities.argmin(test1), 3); assertEquals(test1[StatisticsUtilities.argmin(test1)], 1); assertEquals(StatisticsUtilities.argmin(test2), 0); assertEquals(test2[StatisticsUtilities.argmin(test2)], 4); }