List of usage examples for org.apache.commons.math3.random EmpiricalDistribution probability
public double probability(double x0, double x1)
From source file:org.apache.solr.client.solrj.io.eval.HistogramEvaluator.java
@Override public Object doWork(Object... values) throws IOException { if (Arrays.stream(values).anyMatch(item -> null == item)) { return null; }/*from w w w .j av a2 s. c om*/ List<?> sourceValues; Integer bins = 10; if (values.length >= 1) { sourceValues = values[0] instanceof List<?> ? (List<?>) values[0] : Arrays.asList(values[0]); if (values.length >= 2) { if (values[1] instanceof Number) { bins = ((Number) values[1]).intValue(); } else { throw new IOException(String.format(Locale.ROOT, "Invalid expression %s - if second parameter is provided then it must be a valid number but found %s instead", toExpression(constructingFactory), values[1].getClass().getSimpleName())); } } } else { throw new IOException( String.format(Locale.ROOT, "Invalid expression %s - expecting at least one value but found %d", toExpression(constructingFactory), containedEvaluators.size())); } EmpiricalDistribution distribution = new EmpiricalDistribution(bins); distribution.load( ((List<?>) sourceValues).stream().mapToDouble(value -> ((Number) value).doubleValue()).toArray()); ; List<Tuple> histogramBins = new ArrayList<>(); for (SummaryStatistics binSummary : distribution.getBinStats()) { Map<String, Number> map = new HashMap<>(); map.put("max", binSummary.getMax()); map.put("mean", binSummary.getMean()); map.put("min", binSummary.getMin()); map.put("stdev", binSummary.getStandardDeviation()); map.put("sum", binSummary.getSum()); map.put("N", binSummary.getN()); map.put("var", binSummary.getVariance()); map.put("cumProb", distribution.cumulativeProbability(binSummary.getMean())); map.put("prob", distribution.probability(binSummary.getMin(), binSummary.getMax())); histogramBins.add(new Tuple(map)); } return histogramBins; }