List of usage examples for org.apache.commons.math3.random EmpiricalDistribution load
public void load(File file) throws IOException, NullArgumentException
From source file:cz.cuni.mff.d3s.spl.utils.DistributionUtils.java
/** Create empirical distribution from given samples. * //from w ww . ja v a2 s. co m * @param samples Samples (does not need to be distinct) to use. * @return Empirical distribution built from the samples. */ public static EmpiricalDistribution makeEmpirical(double[] samples) { /* Be deterministic for now. */ RandomGenerator gen = new JDKRandomGenerator(); gen.setSeed(0); EmpiricalDistribution result = new EmpiricalDistribution(samples.length / 10 + 1, gen); result.load(samples); return result; }
From source file:edu.wisc.ssec.mcidasv.data.hydra.Statistics.java
public static Long[] histogram(FlatField field, int bins) throws VisADException { Long[] histogram = new Long[bins]; EmpiricalDistribution distribution = new EmpiricalDistribution(bins); distribution.load(field.getValues(false)[0]); int k = 0;/*from ww w . j a v a2 s . c o m*/ for (SummaryStatistics stats : distribution.getBinStats()) { histogram[k++] = stats.getN(); } return histogram; }
From source file:ijfx.ui.utils.ChartUpdater.java
public void updateChart() { final double min; // minimum value final double max; // maximum value double range; // max - min final double binSize; // int maximumBinNumber = 30; int finalBinNumber; int differentValuesCount = possibleValues.stream().filter(n -> Double.isFinite(n.doubleValue())) .collect(Collectors.toSet()).size(); if (differentValuesCount < maximumBinNumber) { finalBinNumber = differentValuesCount; } else {/*from w w w. j a v a 2s. c o m*/ finalBinNumber = maximumBinNumber; } EmpiricalDistribution distribution = new EmpiricalDistribution(finalBinNumber); Double[] values = possibleValues.parallelStream().filter(n -> Double.isFinite(n.doubleValue())) .map(v -> v.doubleValue()).sorted() //.toArray(); .toArray(size -> new Double[size]); distribution.load(ArrayUtils.toPrimitive(values)); min = values[0]; max = values[values.length - 1]; range = max - min; binSize = range / (finalBinNumber - 1); //System.out.println(String.format("min = %.0f, max = %.0f, range = %.0f, bin size = %.0f, bin number = %d", min, max, range, binSize, finalBinNumber)); XYChart.Series<Double, Double> serie = new XYChart.Series<>(); ArrayList<XYChart.Data<Double, Double>> data = new ArrayList<>(); double k = min; for (SummaryStatistics st : distribution.getBinStats()) { data.add(new XYChart.Data<>(k, new Double(st.getN()))); k += binSize; } Platform.runLater(() -> { serie.getData().addAll(data); areaChart.getData().clear(); areaChart.getData().add(serie); }); }
From source file:ijfx.ui.plugin.panel.OverlayPanel.java
protected XYChart.Series<Double, Double> getOverlayHistogram(Overlay overlay) { Timer timer = timerService.getTimer(this.getClass()); timer.start();/* w w w.j a v a 2 s. c o m*/ Double[] valueList = statsService.getValueList(currentDisplay(), overlay); timer.elapsed("Getting the stats"); SummaryStatistics sumup = new SummaryStatistics(); for (Double v : valueList) { sumup.addValue(v); } timer.elapsed("Building the sumup"); double min = sumup.getMin(); double max = sumup.getMax(); double range = max - min; int bins = 100;//new Double(max - min).intValue(); EmpiricalDistribution distribution = new EmpiricalDistribution(bins); double[] values = ArrayUtils.toPrimitive(valueList); Arrays.parallelSort(values); distribution.load(values); timer.elapsed("Sort and distrubution repartition up"); XYChart.Series<Double, Double> serie = new XYChart.Series<>(); ArrayList<Data<Double, Double>> data = new ArrayList<>(bins); double k = min; for (SummaryStatistics st : distribution.getBinStats()) { data.add(new Data<Double, Double>(k, new Double(st.getN()))); k += range / bins; } serie.getData().clear(); serie.getData().addAll(data); timer.elapsed("Creating charts"); return serie; }
From source file:ijfx.ui.filter.DefaultNumberFilter.java
public void updateChart() { final double min; // minimum value final double max; // maximum value double range; // max - min final double binSize; int maximumBinNumber = 30; int finalBinNumber; int differentValuesCount = possibleValues.stream().filter(n -> Double.isFinite(n.doubleValue())) .collect(Collectors.toSet()).size(); if (differentValuesCount < maximumBinNumber) { finalBinNumber = differentValuesCount; } else {//from ww w . j a v a2 s . c o m finalBinNumber = maximumBinNumber; } EmpiricalDistribution distribution = new EmpiricalDistribution(finalBinNumber); double[] values = possibleValues.parallelStream().filter(n -> Double.isFinite(n.doubleValue())) .mapToDouble(v -> v.doubleValue()).sorted().toArray(); distribution.load(values); min = values[0]; max = values[values.length - 1]; range = max - min; binSize = range / (finalBinNumber - 1); XYChart.Series<Double, Double> serie = new XYChart.Series<>(); ArrayList<Data<Double, Double>> data = new ArrayList<>(); double k = min; for (SummaryStatistics st : distribution.getBinStats()) { data.add(new Data<>(k, new Double(st.getN()))); k += binSize; } Platform.runLater(() -> { serie.getData().addAll(data); areaChart.getData().clear(); areaChart.getData().add(serie); updateSlider(min, max, finalBinNumber); }); }
From source file:ijfx.ui.plugin.overlay.OverlayPanel.java
protected XYChart.Series<Double, Double> getOverlayHistogram(Overlay overlay) { Timer timer = timerService.getTimer(this.getClass()); timer.start();//from w ww. j ava 2 s.c om Double[] valueList = statsService.getValueListFromImageDisplay(currentDisplay(), overlay); timer.elapsed("Getting the stats"); SummaryStatistics sumup = new SummaryStatistics(); for (Double v : valueList) { sumup.addValue(v); } timer.elapsed("Building the sumup"); double min = sumup.getMin(); double max = sumup.getMax(); double range = max - min; int bins = 100;//new Double(max - min).intValue(); EmpiricalDistribution distribution = new EmpiricalDistribution(bins); double[] values = ArrayUtils.toPrimitive(valueList); Arrays.parallelSort(values); distribution.load(values); timer.elapsed("Sort and distrubution repartition up"); XYChart.Series<Double, Double> serie = new XYChart.Series<>(); ArrayList<Data<Double, Double>> data = new ArrayList<>(bins); double k = min; for (SummaryStatistics st : distribution.getBinStats()) { data.add(new Data<Double, Double>(k, new Double(st.getN()))); k += range / bins; } serie.getData().clear(); serie.getData().addAll(data); timer.elapsed("Creating charts"); return serie; }
From source file:gdsc.smlm.ij.plugins.CreateData.java
/** * @return A photon distribution loaded from a file of floating-point values with the specified population mean. *///ww w. j av a2s . co m private RealDistribution createPhotonDistribution() { if (settings.customPhotonDistribution) { // Get the distribution file String[] path = Utils.decodePath(settings.photonDistribution); OpenDialog chooser = new OpenDialog("Photon_distribution", path[0], path[1]); if (chooser.getFileName() != null) { String newFilename = chooser.getDirectory() + chooser.getFileName(); settings.photonDistribution = newFilename; try { InputStream is = new FileInputStream(new File(settings.photonDistribution)); BufferedReader in = new BufferedReader(new UnicodeReader(is, null)); StoredDataStatistics stats = new StoredDataStatistics(); try { String str = null; double val = 0.0d; while ((str = in.readLine()) != null) { val = Double.parseDouble(str); stats.add(val); } } finally { in.close(); } if (stats.getSum() > 0) { // Update the statistics to the desired mean. double scale = (double) settings.photonsPerSecond / stats.getMean(); double[] values = stats.getValues(); for (int i = 0; i < values.length; i++) values[i] *= scale; // TODO - Investigate the limits of this distribution. // How far above and below the input data will values be generated. // Create the distribution using the recommended number of bins final int binCount = stats.getN() / 10; EmpiricalDistribution dist = new EmpiricalDistribution(binCount, createRandomGenerator()); dist.load(values); return dist; } } catch (IOException e) { // Ignore } catch (NullArgumentException e) { // Ignore } catch (NumberFormatException e) { // Ignore } } } // Fall back to a non-custom distribution settings.customPhotonDistribution = false; return null; }
From source file:org.apache.solr.client.solrj.io.eval.EmpiricalDistributionEvaluator.java
@Override public Object doWork(Object value) throws IOException { if (!(value instanceof List<?>)) { throw new StreamEvaluatorException("List value expected but found type %s for value %s", value.getClass().getName(), value.toString()); }//from w w w . j av a 2 s .c o m EmpiricalDistribution empiricalDistribution = new EmpiricalDistribution(); double[] backingValues = ((List<?>) value).stream() .mapToDouble(innerValue -> ((BigDecimal) innerValue).doubleValue()).sorted().toArray(); empiricalDistribution.load(backingValues); return empiricalDistribution; }
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 a v a 2 s . co m*/ 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; }
From source file:org.apache.solr.client.solrj.io.stream.eval.EmpiricalDistributionEvaluatorTest.java
@Test public void test() throws IOException { double[] l1 = new double[] { 3.4, 4.5, 6.7 }; double[] l2 = new double[] { 1.2, 3.2, 3 }; values.clear();//from w w w.j a v a 2 s .c om values.put("l1", l1); values.put("l2", l2); EmpiricalDistribution dist = new EmpiricalDistribution(); dist.load(l1); Assert.assertEquals(dist.getNumericalMean(), ((EmpiricalDistribution) factory.constructEvaluator("emp(l1)").evaluate(new Tuple(values))) .getNumericalMean()); }