@Override public double sum() { double sum = 0.0d; for (int i = 0; i < mapping.getNumMappings(); i++) { sum += mapping.getValues()[i]; } return sum; }
@Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + dimension; result = prime * result + Arrays.hashCode(mapping.getIndices()); result = prime * result + Arrays.hashCode(mapping.getValues()); return result; }
@Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; SequentialSparseDoubleVector other = (SequentialSparseDoubleVector) obj; if (dimension != other.dimension) return false; if (!Arrays.equals(mapping.getIndices(), other.mapping.getIndices())) return false; if (!Arrays.equals(mapping.getValues(), other.mapping.getValues())) return false; return true; }
@Override public double max() { double res = -Double.MAX_VALUE; for (int i = 0; i < mapping.getNumMappings(); i++) { if (res < mapping.getValues()[i]) { res = mapping.getValues()[i]; } } // at the end check for zero, because we have skipped zero elements if (mapping.getNumMappings() != getDimension() && res == 0d) { res = 0d; } return res; }
@Override public DoubleVector pow(double x) { SequentialSparseDoubleVector v = new SequentialSparseDoubleVector(this); for (int i = 0; i < mapping.getNumMappings(); i++) { double value = mapping.getValues()[i]; if (x == 2d) { value = value * value; } else { value = FastMath.pow(value, x); } v.mapping.getValues()[i] = value; } return v; }
@Override public String toString() { if (getLength() < 50) { StringBuilder sb = new StringBuilder("["); for (int i = 0; i < mapping.getNumMappings(); i++) { sb.append(mapping.getIndices()[i]); sb.append('='); sb.append(mapping.getValues()[i]); if (i != mapping.getNumMappings() - 1) { sb.append(", "); } } sb.append(']'); return sb.toString(); } else { return getDimension() + "x1"; } }
@Override protected final DoubleVectorElement computeNext() { if (currentIndex < mapping.getNumMappings()) { element.setIndex(mapping.getIndices()[currentIndex]); element.setValue(mapping.getValues()[currentIndex]); currentIndex++; return element; } else { return endOfData(); } }
double[] updateValues = updates.getValues();