List of usage examples for org.apache.commons.math3.util OpenIntToDoubleHashMap iterator
public Iterator iterator()
From source file:com.cloudera.oryx.common.math.OpenMapRealVector.java
/** * Optimized method to add two OpenMapRealVectors. * It copies the larger vector, then iterates over the smaller. * * @param v Vector to add.//from ww w. j a v a 2 s.c o m * @return the sum of {@code this} and {@code v}. * @throws DimensionMismatchException if the dimensions do not match. */ public OpenMapRealVector add(OpenMapRealVector v) { checkVectorDimensions(v.getDimension()); boolean copyThis = entries.size() > v.entries.size(); OpenMapRealVector res = copyThis ? this.copy() : v.copy(); OpenIntToDoubleHashMap.Iterator iter = copyThis ? v.entries.iterator() : entries.iterator(); OpenIntToDoubleHashMap randomAccess = copyThis ? entries : v.entries; while (iter.hasNext()) { iter.advance(); int key = iter.key(); if (randomAccess.containsKey(key)) { res.setEntry(key, randomAccess.get(key) + iter.value()); } else { res.setEntry(key, iter.value()); } } return res; }
From source file:com.cloudera.oryx.common.math.OpenMapRealVector.java
/** * Optimized method to append a OpenMapRealVector. * @param v vector to append/*w w w .j a v a 2 s .c om*/ * @return The result of appending {@code v} to self */ public OpenMapRealVector append(OpenMapRealVector v) { OpenMapRealVector res = new OpenMapRealVector(this, v.getDimension()); OpenIntToDoubleHashMap.Iterator iter = v.entries.iterator(); while (iter.hasNext()) { iter.advance(); res.setEntry(iter.key() + virtualSize, iter.value()); } return res; }
From source file:com.cloudera.oryx.common.math.OpenMapRealVector.java
@SuppressWarnings("deprecation") @Deprecated/*w w w . j a va 2 s.com*/ @Override public OpenMapRealVector ebeMultiply(RealVector v) { checkVectorDimensions(v.getDimension()); OpenMapRealVector res = new OpenMapRealVector(this); OpenIntToDoubleHashMap.Iterator iter = entries.iterator(); while (iter.hasNext()) { iter.advance(); res.setEntry(iter.key(), iter.value() * v.getEntry(iter.key())); } /* * MATH-803: the above loop assumes that 0d * x = 0d for any double x, * which allows to consider only the non-zero entries of this. However, * this fails if this[i] == 0d and (v[i] = NaN or v[i] = Infinity). * * These special cases are handled below. */ if (v.isNaN() || v.isInfinite()) { int n = getDimension(); for (int i = 0; i < n; i++) { double y = v.getEntry(i); if (Double.isNaN(y)) { res.setEntry(i, Double.NaN); } else if (Double.isInfinite(y)) { double x = this.getEntry(i); res.setEntry(i, x * y); } } } return res; }
From source file:com.cloudera.oryx.common.math.OpenMapRealVector.java
@Override public OpenMapRealVector getSubVector(int index, int n) { checkIndex(index);//from w ww . j av a2s . c o m if (n < 0) { throw new NotPositiveException(LocalizedFormats.NUMBER_OF_ELEMENTS_SHOULD_BE_POSITIVE, n); } checkIndex(index + n - 1); OpenMapRealVector res = new OpenMapRealVector(n); int end = index + n; OpenIntToDoubleHashMap.Iterator iter = entries.iterator(); while (iter.hasNext()) { iter.advance(); int key = iter.key(); if (key >= index && key < end) { res.setEntry(key - index, iter.value()); } } return res; }
From source file:com.cloudera.oryx.common.math.OpenMapRealVector.java
/** * Optimized method to compute distance. * * @param v Vector to compute distance to. * @return the distance from {@code this} and {@code v}. * @throws DimensionMismatchException if the dimensions do not match. *///from ww w . j ava2s . c om public double getDistance(OpenMapRealVector v) { checkVectorDimensions(v.getDimension()); OpenIntToDoubleHashMap.Iterator iter = entries.iterator(); double res = 0; while (iter.hasNext()) { iter.advance(); int key = iter.key(); double delta = iter.value() - v.getEntry(key); res += delta * delta; } iter = v.getEntries().iterator(); while (iter.hasNext()) { iter.advance(); int key = iter.key(); if (!entries.containsKey(key)) { double value = iter.value(); res += value * value; } } return FastMath.sqrt(res); }
From source file:com.cloudera.oryx.common.math.OpenMapRealVector.java
/** * Distance between two vectors.// www .j av a 2s . com * This method computes the distance consistent with * L<sub>1</sub> norm, i.e. the sum of the absolute values of * elements differences. * * @param v Vector to which distance is requested. * @return distance between this vector and {@code v}. * @throws DimensionMismatchException if the dimensions do not match. */ public double getL1Distance(OpenMapRealVector v) { checkVectorDimensions(v.getDimension()); double max = 0; OpenIntToDoubleHashMap.Iterator iter = entries.iterator(); while (iter.hasNext()) { iter.advance(); double delta = FastMath.abs(iter.value() - v.getEntry(iter.key())); max += delta; } iter = v.getEntries().iterator(); while (iter.hasNext()) { iter.advance(); int key = iter.key(); if (!entries.containsKey(key)) { double delta = FastMath.abs(iter.value()); max += FastMath.abs(delta); } } return max; }
From source file:com.cloudera.oryx.common.math.OpenMapRealVector.java
/** * Optimized method to compute LInfDistance. * * @param v Vector to compute distance from. * @return the LInfDistance./* w w w.j av a 2 s . c o m*/ * @throws DimensionMismatchException if the dimensions do not match. */ private double getLInfDistance(OpenMapRealVector v) { checkVectorDimensions(v.getDimension()); double max = 0; OpenIntToDoubleHashMap.Iterator iter = entries.iterator(); while (iter.hasNext()) { iter.advance(); double delta = FastMath.abs(iter.value() - v.getEntry(iter.key())); if (delta > max) { max = delta; } } iter = v.getEntries().iterator(); while (iter.hasNext()) { iter.advance(); int key = iter.key(); if (!entries.containsKey(key) && iter.value() > max) { max = iter.value(); } } return max; }
From source file:com.cloudera.oryx.common.math.OpenMapRealVector.java
@Override public boolean isInfinite() { boolean infiniteFound = false; OpenIntToDoubleHashMap.Iterator iter = entries.iterator(); while (iter.hasNext()) { iter.advance();// ww w . j ava 2 s.co m double value = iter.value(); if (Double.isNaN(value)) { return false; } if (Double.isInfinite(value)) { infiniteFound = true; } } return infiniteFound; }
From source file:com.cloudera.oryx.common.math.OpenMapRealVector.java
@Override public boolean isNaN() { OpenIntToDoubleHashMap.Iterator iter = entries.iterator(); while (iter.hasNext()) { iter.advance();/* www.ja v a 2s . c o m*/ if (Double.isNaN(iter.value())) { return true; } } return false; }
From source file:com.cloudera.oryx.common.math.OpenMapRealVector.java
/** * Optimized method to subtract OpenMapRealVectors. * * @param v Vector to subtract from {@code this}. * @return the difference of {@code this} and {@code v}. * @throws DimensionMismatchException if the dimensions do not match. *//*from w w w . ja v a2s. c o m*/ public OpenMapRealVector subtract(OpenMapRealVector v) { checkVectorDimensions(v.getDimension()); OpenMapRealVector res = copy(); OpenIntToDoubleHashMap.Iterator iter = v.getEntries().iterator(); while (iter.hasNext()) { iter.advance(); int key = iter.key(); if (entries.containsKey(key)) { res.setEntry(key, entries.get(key) - iter.value()); } else { res.setEntry(key, -iter.value()); } } return res; }