Refine search
/** * toString() implementation for sparse vectors via {@link #nonZeroes()} method * @return String representation of the vector */ public String sparseVectorToString() { Iterator<Element> it = iterateNonZero(); if (!it.hasNext()) { return "{}"; } else { StringBuilder result = new StringBuilder(); result.append('{'); while (it.hasNext()) { Vector.Element e = it.next(); result.append(e.index()); result.append(':'); result.append(e.get()); result.append(','); } result.setCharAt(result.length() - 1, '}'); return result.toString(); } }
public static Vector mergeToVector(Iterator<VectorWritable> vectors) { Vector accumulator = vectors.next().get(); while (vectors.hasNext()) { VectorWritable v = vectors.next(); if (v != null) { for (Element nonZeroElement : v.get().nonZeroes()) { accumulator.setQuick(nonZeroElement.index(), nonZeroElement.get()); } } } return accumulator; }
@Override public Vector assign(Vector x, Vector y, DoubleDoubleFunction f) { Iterator<Vector.Element> xi = x.all().iterator(); Iterator<Vector.Element> yi = y.all().iterator(); while (xi.hasNext() && yi.hasNext()) { Element xe = xi.next(); x.setQuick(xe.index(), f.apply(xe.get(), yi.next().get())); } return x; } }
@Override public Vector assign(Vector x, Vector y, DoubleDoubleFunction f) { Iterator<Vector.Element> xi = x.all().iterator(); Iterator<Vector.Element> yi = y.all().iterator(); OrderedIntDoubleMapping updates = new OrderedIntDoubleMapping(false); while (xi.hasNext() && yi.hasNext()) { Element xe = xi.next(); updates.set(xe.index(), f.apply(xe.get(), yi.next().get())); } x.mergeUpdates(updates); return x; } }
/** Asserts a vector using enumeration equals a given dense vector */ private static void doTestEnumeration(double[] apriori, Vector vector) { double[] test = new double[apriori.length]; for (Element e : vector.all()) { test[e.index()] = e.get(); } for (int i = 0; i < test.length; i++) { assertEquals(apriori[i], test[i], EPSILON); } }
@Override public Matrix assignColumn(int column, Vector other) { if (columnSize() != other.size()) { throw new IndexException(columnSize(), other.size()); } if (other.viewPart(column + 1, other.size() - column - 1).norm(1) > 1.0e-14) { throw new IllegalArgumentException("Cannot set lower portion of triangular matrix to non-zero"); } for (Vector.Element element : other.viewPart(0, column).all()) { setQuick(element.index(), column, element.get()); } return this; }
@Override public double aggregate(Vector x, Vector y, DoubleDoubleFunction fa, DoubleDoubleFunction fc) { Iterator<Vector.Element> xi = x.all().iterator(); boolean validResult = false; double result = 0; while (xi.hasNext()) { Vector.Element xe = xi.next(); double thisResult = fc.apply(xe.get(), y.getQuick(xe.index())); if (validResult) { result = fa.apply(result, thisResult); } else { result = thisResult; validResult = true; } } return result; } }
@Override public double aggregate(Vector x, Vector y, DoubleDoubleFunction fa, DoubleDoubleFunction fc) { Iterator<Vector.Element> yi = y.all().iterator(); boolean validResult = false; double result = 0; while (yi.hasNext()) { Vector.Element ye = yi.next(); double thisResult = fc.apply(x.getQuick(ye.index()), ye.get()); if (validResult) { result = fa.apply(result, thisResult); } else { result = thisResult; validResult = true; } } return result; } }
@Override public Vector assign(double[] values) { if (size != values.length) { throw new CardinalityException(size, values.length); } if (isSequentialAccess() && !isAddConstantTime()) { OrderedIntDoubleMapping updates = new OrderedIntDoubleMapping(); Iterator<Element> it = iterator(); while (it.hasNext()) { Element element = it.next(); int index = element.index(); if (element.get() == 0.0) { updates.set(index, values[index]); } else { element.set(values[index]); } } mergeUpdates(updates); } else { for (int i = 0; i < size; ++i) { setQuick(i, values[i]); } } invalidateCachedLength(); return this; }
@Override public int maxValueIndex() { int result = -1; double max = Double.NEGATIVE_INFINITY; int nonZeroElements = 0; Iterator<Element> iter = this.iterateNonZero(); while (iter.hasNext()) { nonZeroElements++; Element element = iter.next(); double tmp = element.get(); if (tmp > max) { max = tmp; result = element.index(); } } // if the maxElement is negative and the vector is sparse then any // unfilled element(0.0) could be the maxValue hence we need to // find one of those elements if (nonZeroElements < size && max < 0.0) { for (Element element : all()) { if (element.get() == 0.0) { return element.index(); } } } return result; }