Example usage for org.apache.commons.math3.random EmpiricalDistribution load

List of usage examples for org.apache.commons.math3.random EmpiricalDistribution load

Introduction

In this page you can find the example usage for org.apache.commons.math3.random EmpiricalDistribution load.

Prototype

public void load(File file) throws IOException, NullArgumentException 

Source Link

Document

Computes the empirical distribution from the input file.

Usage

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());
}