@Override public void scaleEquals( final double scaleFactor) { this.internalVector.scale( scaleFactor ); }
@Override public void scaleEquals( final double scaleFactor) { this.internalVector.scale( scaleFactor ); }
@Override public void scaleEquals( final double scaleFactor) { this.internalVector.scale( scaleFactor ); }
@Override public Vector get() { return super.get().scale(1./count); }
private void normalize(Vector scv) { double norm = normalizationMode.apply(scv); if (norm == 0.0) { return; } scv.scale(1 / norm); }
@Override public Vector get() { return super.get().scale(1./count); }
private void normalize(Vector scv) { double norm = normalizationMode.apply(scv); if (norm == 0.0) { return; } scv.scale(1 / norm); }
@Override public Vector get() { return super.get().scale(1./count); }
private void normalize(Vector scv) { double norm = normalizationMode.apply(scv); if (norm == 0.0) { return; } scv.scale(1 / norm); }
@Override public Vector multAdd(double alpha, Vector x, Vector y) { if (!(x instanceof DenseVector) || !(y instanceof DenseVector)) return super.multAdd(alpha, x, y); checkMultAdd(x, y); double[] xd = ((DenseVector) x).getData(), yd = ((DenseVector) y) .getData(); // y = 1/alpha * y y.scale(1 / alpha); // y = A*x + y for (int i = 0; i < numColumns; ++i) for (int j = columnPointer[i]; j < columnPointer[i + 1]; ++j) yd[rowIndex[j]] += data[j] * xd[i]; // y = alpha*y = alpha*A*x + y return y.scale(alpha); }
@Override public Vector transMultAdd(double alpha, Vector x, Vector y) { if (!(x instanceof DenseVector) || !(y instanceof DenseVector)) return super.transMultAdd(alpha, x, y); checkTransMultAdd(x, y); double[] xd = ((DenseVector) x).getData(); double[] yd = ((DenseVector) y).getData(); // y = 1/alpha * y y.scale(1. / alpha); // y = A'x + y for (int i = 0; i < numRows; ++i) for (int j = rowPointer[i]; j < rowPointer[i + 1]; ++j) yd[columnIndex[j]] += data[j] * xd[i]; // y = alpha*y = alpha*A'x + y return y.scale(alpha); }
@Override public Vector transMultAdd(double alpha, Vector x, Vector y) { if (!(x instanceof DenseVector) || !(y instanceof DenseVector)) return super.transMultAdd(alpha, x, y); checkTransMultAdd(x, y); double[] xd = ((DenseVector) x).getData(); double[] yd = ((DenseVector) y).getData(); // y = 1/alpha * y y.scale(1. / alpha); // y = A'x + y for (int i = 0; i < numRows; ++i) for (int j = rowPointer[i]; j < rowPointer[i + 1]; ++j) yd[columnIndex[j]] += data[j] * xd[i]; // y = alpha*y = alpha*A'x + y return y.scale(alpha); }
@Override public Vector multAdd(double alpha, Vector x, Vector y) { if (!(x instanceof DenseVector) || !(y instanceof DenseVector)) return super.multAdd(alpha, x, y); checkMultAdd(x, y); double[] xd = ((DenseVector) x).getData(), yd = ((DenseVector) y) .getData(); // y = 1/alpha * y y.scale(1 / alpha); // y = A*x + y for (int i = 0; i < numColumns; ++i) for (int j = columnPointer[i]; j < columnPointer[i + 1]; ++j) yd[rowIndex[j]] += data[j] * xd[i]; // y = alpha*y = alpha*A*x + y return y.scale(alpha); }
private Vector project(Vector v, Vector u){ return u.copy().scale((v.dot(u) / u.dot(u))); }
@Override public Vector transMultAdd(double alpha, Vector x, Vector y) { if (!(x instanceof DenseVector) || !(y instanceof DenseVector)) return super.transMultAdd(alpha, x, y); checkTransMultAdd(x, y); double[] xd = ((DenseVector) x).getData(), yd = ((DenseVector) y) .getData(); // y = 1/alpha * y y.scale(1. / alpha); // y = A'x + y for (int i = 0; i < numRows; ++i) { SparseVector v = rowD[i]; int[] index = v.getIndex(); double[] data = v.getData(); int length = v.getUsed(); for (int j = 0; j < length; ++j) yd[index[j]] += data[j] * xd[i]; } // y = alpha*y = alpha * A'x + y return y.scale(alpha); }
@Override public Vector multAdd(double alpha, Vector x, Vector y) { if (!(x instanceof DenseVector) || !(y instanceof DenseVector)) return super.multAdd(alpha, x, y); checkMultAdd(x, y); double[] xd = ((DenseVector) x).getData(); double[] yd = ((DenseVector) y).getData(); // y = 1/alpha * y y.scale(1. / alpha); // y = A*x + y for (int i = 0; i < numColumns; ++i) { SparseVector v = colD[i]; int[] index = v.getIndex(); double[] data = v.getData(); int length = v.getUsed(); for (int j = 0; j < length; ++j) yd[index[j]] += data[j] * xd[i]; } // y = alpha*y = alpha * A'x + y return y.scale(alpha); }
@Override public Vector[] apply(double[] in) { Vector[] vmat = new Vector[in.length]; vmat[0] = new DenseVector(in); double norm = vmat[0].norm(Norm.Two); vmat[0].scale(1/norm); for (int j = 1; j < in.length; j++) { Vector randvec = randvec(vmat[0].size(),norm); vmat[j] = new DenseVector(vmat[0]).add(randvec); for (int i = 0; i < j; i++) { vmat[j].add(-1, project(vmat[j],vmat[i])); } vmat[j].scale(1/vmat[j].norm(Norm.Two)); } return vmat; }
/** * Computes the mean vector for the given dataset. */ protected Vector computeMean(Instances data, double[] totalWeight, int aI) { Vector meanVector = new DenseVector(data.numAttributes() - 1); totalWeight[aI] = 0; for (Instance inst : data) { if (!inst.classIsMissing()) { meanVector.add(inst.weight(), instanceToVector(inst)); totalWeight[aI] += inst.weight(); } } meanVector.scale(1.0 / totalWeight[aI]); return meanVector; }
public Vector solve(Matrix A, Vector b, Vector x) throws IterativeSolverNotConvergedException { checkSizes(A, b, x); double alpha = 0, beta = 0, c = 0, d = 0; A.multAdd(-1, x, r.set(b)); c = (eigmax - eigmin) / 2.0; d = (eigmax + eigmin) / 2.0; for (iter.setFirst(); !iter.converged(r, x); iter.next()) { M.apply(r, z); if (iter.isFirst()) { p.set(z); alpha = 2.0 / d; } else { beta = (alpha * c) / 2.0; beta *= beta; alpha = 1.0 / (d - beta); p.scale(beta).add(z); } A.mult(p, q); x.add(alpha, p); r.add(-alpha, q); } return x; }
public Vector solve(Matrix A, Vector b, Vector x) throws IterativeSolverNotConvergedException { checkSizes(A, b, x); double alpha = 0, beta = 0, rho = 0, rho_1 = 0; A.multAdd(-1, x, r.set(b)); for (iter.setFirst(); !iter.converged(r, x); iter.next()) { M.apply(r, z); rho = r.dot(z); if (iter.isFirst()) p.set(z); else { beta = rho / rho_1; p.scale(beta).add(z); } A.mult(p, q); alpha = rho / p.dot(q); x.add(alpha, p); r.add(-alpha, q); rho_1 = rho; } return x; }