RealMatrix eBeta = MatrixUtils.createRealMatrix(itemNum, featureCount); for (int user = 0; user < userNum; user++) { RealVector gammaShpU = gammaShp.getRowVector(user); RealVector gammaRteU = gammaRte.getRowVector(user); RealVector eThetaU = gammaShpU.ebeDivide(gammaRteU); eTheta.setRowVector(user, eThetaU); RealVector lambdaShpI = lambdaShp.getRowVector(item); RealVector lambdaRteI = lambdaRte.getRowVector(item); RealVector eBetaI = lambdaShpI.ebeDivide(lambdaRteI); eBeta.setRowVector(item, eBetaI);
public void eStep(){ IntStream.range(0,data.getRowDimension()).parallel() .forEach(i->gammas[i]=gmm.posteriors(data.getRowVector(i))); }
@Override public double getNormInfinity(Matrix m) { ArgChecker.notNull(m, "m"); if (m instanceof DoubleArray) { RealVector temp = CommonsMathWrapper.wrap((DoubleArray) m); return temp.getLInfNorm(); } else if (m instanceof DoubleMatrix) { RealMatrix temp = CommonsMathWrapper.wrap((DoubleMatrix) m); //REVIEW Commons getNorm() is wrong - it returns the column norm // TODO find if commons implements this anywhere, so we are not doing it // by hand double max = 0.0; for (int row = temp.getRowDimension() - 1; row >= 0; row--) { max = Math.max(max, temp.getRowVector(row).getL1Norm()); } return max; } throw new IllegalArgumentException("Can only find normInfinity of DoubleMatrix; have " + m.getClass()); }
private RealMatrix computeCov(int k, RealVector mean, double sumGamma){ RealMatrix res = new Array2DRowRealMatrix(data.getColumnDimension(),data.getColumnDimension()); for (int i=0;i<data.getRowDimension();i++){ res = res.add(data.getRowVector(i).outerProduct(data.getRowVector(i)).scalarMultiply(gammas[i][k])); } return res.scalarMultiply(1/sumGamma).subtract(mean.outerProduct(mean)); }
private RealVector computeMean(int k, double sumGamma){ RealVector res = new ArrayRealVector(data.getColumnDimension()); for (int i=0;i<data.getRowDimension();i++){ res = res.add(data.getRowVector(i).mapMultiply(gammas[i][k])); } return res.mapDivide(sumGamma); }
fullM.setRowVector(0, M.getRowVector(0)); ret[0] = 0; int iRank = 1; RealMatrix tmp = MatrixUtils.createRealMatrix(fullM.getRowDimension()+1, col); tmp.setSubMatrix(fullM.getData(), 0, 0); tmp.setRowVector(fullM.getRowDimension(), M.getRowVector(i)); SingularValueDecomposition dFact_i = new SingularValueDecomposition(tmp); int ri = dFact_i.getRank();
/** * Find the offset of the ellipsoid. * * @param a the algebraic from of the polynomial. * @return a vector containing the offset of the ellipsoid. */ private RealVector findCenter(RealMatrix a) { RealMatrix subA = a.getSubMatrix(0, 2, 0, 2); for (int q = 0; q < subA.getRowDimension(); q++) { for (int s = 0; s < subA.getColumnDimension(); s++) { subA.multiplyEntry(q, s, -1.0); } } RealVector subV = a.getRowVector(3).getSubVector(0, 3); // inv (dtd) DecompositionSolver solver = new SingularValueDecomposition(subA) .getSolver(); RealMatrix subAi = solver.getInverse(); return subAi.operate(subV); }
int randomMeanInstance = Sampling.intUniform(0,data.getRowDimension()-1); RealVector mean = data.getRowVector(randomMeanInstance).copy();