@Override public double max() { double max = -Double.MAX_VALUE; for (int i = 0; i < getLength(); i++) { double d = vector[i]; if (d > max) { max = d; } } return max; }
@Override public double min() { double min = Double.MAX_VALUE; for (int i = 0; i < getLength(); i++) { double d = vector[i]; if (d < min) { min = d; } } return min; }
@Override public int getDimension() { return getLength(); }
@Override public int minIndex() { double min = Double.MAX_VALUE; int minIndex = 0; for (int i = 0; i < getLength(); i++) { double d = vector[i]; if (d < min) { min = d; minIndex = i; } } return minIndex; }
@Override public int maxIndex() { double max = -Double.MAX_VALUE; int maxIndex = 0; for (int i = 0; i < getLength(); i++) { double d = vector[i]; if (d > max) { max = d; maxIndex = i; } } return maxIndex; }
@Override public DoubleVector pow(double x) { DenseDoubleVector v = new DenseDoubleVector(this.getLength()); for (int i = 0; i < v.getLength(); i++) { double value = 0.0d; // it is faster to multiply when we having ^2 if (x == 2d) { value = vector[i] * vector[i]; } else { value = FastMath.pow(vector[i], x); } v.set(i, value); } return v; }
/** * @return a new vector filled from index, to index, with a given stepsize. */ public static DenseDoubleVector fromUpTo(double from, double to, double stepsize) { DenseDoubleVector v = new DenseDoubleVector( (int) (FastMath.round(((to - from) / stepsize) + 0.5))); for (int i = 0; i < v.getLength(); i++) { v.set(i, from + i * stepsize); } return v; }
@Override public DoubleVector abs() { DoubleVector v = new DenseDoubleVector(getLength()); for (int i = 0; i < v.getLength(); i++) { v.set(i, FastMath.abs(vector[i])); } return v; }
@Override public DoubleVector exp() { DoubleVector v = new DenseDoubleVector(getLength()); for (int i = 0; i < v.getLength(); i++) { v.set(i, FastMath.exp(vector[i])); } return v; }
@Override public DoubleVector divideFrom(double scalar) { DoubleVector v = new DenseDoubleVector(this.getLength()); for (int i = 0; i < v.getLength(); i++) { if (this.get(i) != 0.0d) { double result = scalar / this.get(i); v.set(i, result); } else { throw new java.lang.ArithmeticException("/ by zero"); } } return v; }
@Override public DoubleVector sqrt() { DoubleVector v = new DenseDoubleVector(this.getLength()); for (int i = 0; i < v.getLength(); i++) { v.set(i, FastMath.sqrt(vector[i])); } return v; }
@Override public DoubleVector log() { DoubleVector v = new DenseDoubleVector(getLength()); for (int i = 0; i < v.getLength(); i++) { v.set(i, FastMath.log(vector[i])); } return v; }
@Override public DoubleVector multiply(double scalar) { DoubleVector v = new DenseDoubleVector(this.getLength()); for (int i = 0; i < v.getLength(); i++) { v.set(i, this.get(i) * scalar); } return v; }
/** * Returns the indices of the relevant items that are above the threshold. */ static int[] filterRelevantItems(DenseDoubleVector relevanceScores, double threshold) { TIntArrayList list = new TIntArrayList(); for (int i = 0; i < relevanceScores.getLength(); i++) { double val = relevanceScores.get(i); if (val > threshold) { list.add(i); } } return list.toArray(); }
@Override public DoubleVector divide(DoubleVector vector) { DoubleVector v = new DenseDoubleVector(this.getLength()); for (int i = 0; i < v.getLength(); i++) { if (vector.get(i) != 0.0d) { double result = this.get(i) / vector.get(i); v.set(i, result); } else { throw new java.lang.ArithmeticException("/ by zero"); } } return v; }
@Override public DoubleVector divideFrom(DoubleVector vector) { DoubleVector v = new DenseDoubleVector(this.getLength()); for (int i = 0; i < v.getLength(); i++) { if (this.get(i) != 0.0d) { double result = vector.get(i) / this.get(i); v.set(i, result); } else { throw new java.lang.ArithmeticException("/ by zero"); } } return v; }
@Override public double dot(DoubleVector s) { double dotProduct = 0.0d; if (s.isSparse()) { Iterator<DoubleVectorElement> iterateNonZero = s.iterateNonZero(); while (iterateNonZero.hasNext()) { DoubleVectorElement next = iterateNonZero.next(); dotProduct += this.get(next.getIndex()) * next.getValue(); } } else { for (int i = 0; i < getLength(); i++) { dotProduct += this.get(i) * s.get(i); } } return dotProduct; }