@Override public DoubleVector deepCopy() { return new SparseBitVector(this); }
@Override public DoubleVector divideFrom(double scalar) { DoubleVector v = new SparseBitVector(this); Iterator<DoubleVectorElement> it = v.iterateNonZero(); while (it.hasNext()) { DoubleVectorElement e = it.next(); v.set(e.getIndex(), scalar / e.getValue()); } return v; }
@Override public DoubleVector add(double scalar) { DoubleVector v = new SparseBitVector(getDimension()); Iterator<DoubleVectorElement> it = iterate(); while (it.hasNext()) { DoubleVectorElement e = it.next(); v.set(e.getIndex(), e.getValue() + scalar); } return v; }
@Override public DoubleVector multiply(double scalar) { DoubleVector v = new SparseBitVector(getDimension()); Iterator<DoubleVectorElement> it = iterateNonZero(); while (it.hasNext()) { DoubleVectorElement e = it.next(); v.set(e.getIndex(), e.getValue() * scalar); } return v; }
@Override public DoubleVector subtract(double scalar) { DoubleVector v = new SparseBitVector(getDimension()); Iterator<DoubleVectorElement> it = iterate(); while (it.hasNext()) { DoubleVectorElement e = it.next(); v.set(e.getIndex(), e.getValue() - scalar); } return v; }
@Override public DoubleVector divide(double scalar) { DoubleVector v = new SparseBitVector(getDimension()); Iterator<DoubleVectorElement> it = iterateNonZero(); while (it.hasNext()) { DoubleVectorElement e = it.next(); v.set(e.getIndex(), e.getValue() / scalar); } return v; }
@Override public DoubleVector abs() { DoubleVector v = new SparseBitVector(this); Iterator<DoubleVectorElement> it = v.iterateNonZero(); while (it.hasNext()) { DoubleVectorElement e = it.next(); v.set(e.getIndex(), FastMath.abs(e.getValue())); } return v; }
@Override public DoubleVector subtractFrom(double scalar) { DoubleVector v = new SparseBitVector(getDimension()); Iterator<DoubleVectorElement> it = iterate(); while (it.hasNext()) { DoubleVectorElement e = it.next(); v.set(e.getIndex(), scalar - e.getValue()); } return v; }
@Override public DoubleVector exp() { DoubleVector v = new SparseBitVector(getDimension()); Iterator<DoubleVectorElement> it = iterateNonZero(); while (it.hasNext()) { DoubleVectorElement e = it.next(); v.set(e.getIndex(), FastMath.exp(e.getValue())); } return v; }
@Override public DoubleVector apply(DoubleVectorFunction func) { SparseBitVector newV = new SparseBitVector(getDimension()); Iterator<DoubleVectorElement> iterate = this.iterate(); while (iterate.hasNext()) { DoubleVectorElement next = iterate.next(); double res = func.calculate(next.getIndex(), next.getValue()); newV.set(next.getIndex(), res); } return newV; }
@Override public DoubleVector log() { DoubleVector v = new SparseBitVector(getDimension()); Iterator<DoubleVectorElement> it = iterateNonZero(); while (it.hasNext()) { DoubleVectorElement e = it.next(); v.set(e.getIndex(), FastMath.log(e.getValue())); } return v; }
@Override public DoubleVector slice(int start, int end) { DoubleVector nv = new SparseBitVector(end - start); Iterator<DoubleVectorElement> iterateNonZero = iterateNonZero(); while (iterateNonZero.hasNext()) { DoubleVectorElement next = iterateNonZero.next(); if (next.getIndex() >= start && next.getIndex() < end) { nv.set(next.getIndex() - start, next.getValue()); } } return nv; }
@Override public DoubleVector sqrt() { DoubleVector v = new SparseBitVector(getDimension()); Iterator<DoubleVectorElement> it = iterateNonZero(); while (it.hasNext()) { DoubleVectorElement e = it.next(); v.set(e.getIndex(), FastMath.sqrt(e.getValue())); } return v; }
@Override public DoubleVector sliceByLength(int start, int length) { DoubleVector nv = new SparseBitVector(length); Iterator<DoubleVectorElement> iterateNonZero = iterateNonZero(); final int endIndex = start + length; while (iterateNonZero.hasNext()) { DoubleVectorElement next = iterateNonZero.next(); if (next.getIndex() >= start && next.getIndex() < endIndex) { nv.set(next.getIndex() - start, next.getValue()); } } return nv; }
@Override public DoubleVector divide(DoubleVector vector) { DoubleVector v = new SparseBitVector(getDimension()); Iterator<DoubleVectorElement> it = iterateNonZero(); while (it.hasNext()) { DoubleVectorElement e = it.next(); v.set(e.getIndex(), e.getValue() / vector.get(e.getIndex())); } return v; }
@Override public DoubleVector divideFrom(DoubleVector vector) { DoubleVector v = new SparseBitVector(getDimension()); Iterator<DoubleVectorElement> it = vector.iterateNonZero(); while (it.hasNext()) { DoubleVectorElement e = it.next(); v.set(e.getIndex(), e.getValue() / get(e.getIndex())); } return v; }
@Override public DoubleVector apply(DoubleVector other, DoubleDoubleVectorFunction func) { SparseBitVector newV = new SparseBitVector(getDimension()); Iterator<DoubleVectorElement> iterate = this.iterate(); while (iterate.hasNext()) { DoubleVectorElement next = iterate.next(); double res = func.calculate(next.getIndex(), next.getValue(), other.get(next.getIndex())); newV.set(next.getIndex(), res); } return newV; }
@Override public DoubleVector pow(double x) { DoubleVector v = new SparseBitVector(getDimension()); Iterator<DoubleVectorElement> it = iterateNonZero(); while (it.hasNext()) { DoubleVectorElement e = it.next(); double value = 0.0d; if (x == 2d) { value = e.getValue() * e.getValue(); } else { value = FastMath.pow(e.getValue(), x); } v.set(e.getIndex(), value); } return v; }
@Override public DoubleVector multiply(DoubleVector s) { DoubleVector vec = new SparseBitVector(s.getDimension()); // take a shortcut by just iterating over the non-zero elements of the // smaller vector of both multiplicants. DoubleVector smallestVector = s.getLength() < getLength() ? s : this; DoubleVector largerVector = smallestVector == this ? s : this; Iterator<DoubleVectorElement> it = smallestVector.iterateNonZero(); while (it.hasNext()) { DoubleVectorElement next = it.next(); double otherValue = largerVector.get(next.getIndex()); vec.set(next.getIndex(), next.getValue() * otherValue); } return vec; }
@Override public DoubleVector subtract(DoubleVector other) { DoubleVector result = new SparseBitVector(getDimension()); Iterator<DoubleVectorElement> iter = other.iterateNonZero(); TIntHashSet calculated = new TIntHashSet(); while (iter.hasNext()) { DoubleVectorElement e = iter.next(); int index = e.getIndex(); calculated.add(index); result.set(index, this.get(index) - e.getValue()); } iter = iterateNonZero(); while (iter.hasNext()) { DoubleVectorElement e = iter.next(); int index = e.getIndex(); if (!calculated.contains(index)) { result.set(index, e.getValue() - other.get(index)); } } return result; }