private void calculateBuckets( Set<? extends Person> persons, DynamicDoubleArray sums, DynamicIntArray counts, String xAttrKey, String yAttrKey) { TIntDoubleHashMap sumBuckets = new TIntDoubleHashMap(); TIntIntHashMap countBuckets = new TIntIntHashMap(); for (Person person : persons) { String xValStr = person.getAttribute(xAttrKey); String yValStr = person.getAttribute(yAttrKey); if (xValStr != null && yValStr != null) { double xVal = Double.parseDouble(xValStr); double yVal = Double.parseDouble(yValStr); int bucketIdx = xDataDiscr.index(xVal); sumBuckets.adjustOrPutValue(bucketIdx, yVal, yVal); countBuckets.adjustOrPutValue(bucketIdx, 1, 1); } } TIntDoubleIterator it = sumBuckets.iterator(); for (int i = 0; i < sumBuckets.size(); i++) { it.advance(); int bucketIndex = it.key(); double sum = it.value(); int cnt = countBuckets.get(bucketIndex); sums.set(bucketIndex, sum); counts.set(bucketIndex, cnt); } }
private double changeBucketContent(int bucketIndex, double value, boolean add) { double oldDiff = calculateDiff(bucketIndex); double sum = bucketSums.get(bucketIndex); int count = bucketCounts.get(bucketIndex); if (add) { bucketSums.set(bucketIndex, sum + value); bucketCounts.set(bucketIndex, count + 1); } else { bucketSums.set(bucketIndex, sum - value); bucketCounts.set(bucketIndex, count - 1); } double newDiff = calculateDiff(bucketIndex); return newDiff - oldDiff; }
private DynamicIntArray initHistogram(Set<? extends Attributable> elements, String key) { DynamicIntArray array = new DynamicIntArray(12, 0); for (Attributable element : elements) { String strVal = element.getAttribute(key); if (strVal != null) { double value = Double.parseDouble(strVal); int bucket = discretizer.index(value); array.set(bucket, array.get(bucket) + 1); } } return array; }
private double changeBucketContent(int bucketIndex, int value) { double simVal = simFreq.get(bucketIndex); double refVal = refFreq.get(bucketIndex) * scaleFactor; // double oldDiff = Math.abs(simVal - refVal)/refVal; double oldDiff = calculateError(simVal, refVal); simFreq.set(bucketIndex, simFreq.get(bucketIndex) + value); simVal = simFreq.get(bucketIndex); refVal = refFreq.get(bucketIndex) * scaleFactor; // double newDiff = Math.abs(simVal - refVal)/refVal; double newDiff = calculateError(simVal, refVal); return newDiff - oldDiff; }