public double[][] sampleGibbsClassificationsIG(double[] observations, double[][] parameters) { Random ran = new Random(); double[][] observationClass = new double[observations.length][2]; Double[][] probabilities = new Double[parameters.length][2]; double[] IGparams = new double[2]; Double constant = 0.0; double random = 0.0; for (int i = 0; i < observations.length; i++) { random = ran.nextDouble(); observationClass[i][0] = observations[i]; for (int k = 0; k < parameters.length; k++) { IGparams[0] = parameters[k][0]; IGparams[1] = parameters[k][1]; probabilities[k][0] = (Double) (Distribution.computeIGDensityGeneral(observations[i], IGparams) * parameters[k][2]); constant += probabilities[k][0]; //System.out.println("Probabilities: " + probabilities[k][0]); } //Comparator sorts the fields in descending order Arrays.sort(probabilities, new DoubleArrayComparator(0)); //Look now if the argumentum minimum over the sequence of the sum of the probabilities ist smaller than the random draw. for (int k = 0; k < parameters.length; k++) { if (k == 0) { probabilities[k][1] = probabilities[k][0] / constant; } else { probabilities[k][1] = probabilities[k - 1][1] + probabilities[k][0]/constant; } //System.out.println("Probability: " + probabilities[k][1] + " random number: " + random); if(probabilities[k][1].compareTo((Double) random) >= 0) { observationClass[i][1] = k; break; } else continue; } constant = 0.0; } return observationClass; }