Example usage for org.apache.commons.math3.util OpenIntToDoubleHashMap iterator

List of usage examples for org.apache.commons.math3.util OpenIntToDoubleHashMap iterator

Introduction

In this page you can find the example usage for org.apache.commons.math3.util OpenIntToDoubleHashMap iterator.

Prototype

public Iterator iterator() 

Source Link

Document

Get an iterator over map elements.

Usage

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