List of usage examples for org.apache.commons.math.linear RealVector dotProduct
double dotProduct(double[] v);
From source file:datafu.pig.hash.lsh.metric.Cosine.java
/** * Cosine similarity./* ww w .ja v a 2s .c om*/ * @param v1 * @param v2 * @return The cosine of the angle between the vectors */ public static double distance(RealVector v1, RealVector v2) { return (v1.dotProduct(v2)) / (v1.getNorm() * v2.getNorm()); }
From source file:com.opengamma.analytics.math.matrix.CommonsMatrixAlgebra.java
/** * {@inheritDoc}// w ww . j av a 2 s. co m */ @Override public double getInnerProduct(final Matrix<?> m1, final Matrix<?> m2) { Validate.notNull(m1, "m1"); Validate.notNull(m2, "m2"); if (m1 instanceof DoubleMatrix1D && m2 instanceof DoubleMatrix1D) { final RealVector t1 = CommonsMathWrapper.wrap((DoubleMatrix1D) m1); final RealVector t2 = CommonsMathWrapper.wrap((DoubleMatrix1D) m2); return t1.dotProduct(t2); } throw new IllegalArgumentException( "Can only find inner product of DoubleMatrix1D; have " + m1.getClass() + " and " + m2.getClass()); }
From source file:eu.amidst.core.exponentialfamily.EF_Normal_NormalParents2.java
/** * {@inheritDoc}//from w ww . j av a2 s . co m */ @Override public void updateNaturalFromMomentParameters() { /* * First step: means and convariances */ CompoundVector globalMomentParam = (CompoundVector) this.momentParameters; double mean_X = globalMomentParam.getXYbaseMatrix().getEntry(0); RealVector mean_Y = globalMomentParam.getTheta_beta0BetaRV(); double cov_XX = globalMomentParam.getcovbaseMatrix().getEntry(0, 0) - mean_X * mean_X; RealMatrix cov_YY = globalMomentParam.getcovbaseMatrix().getSubMatrix(1, nOfParents, 1, nOfParents) .subtract(mean_Y.outerProduct(mean_Y)); RealVector cov_XY = globalMomentParam.getcovbaseMatrix().getSubMatrix(0, 0, 1, nOfParents).getRowVector(0) .subtract(mean_Y.mapMultiply(mean_X)); //RealVector cov_YX = cov_XY; //outerProduct transposes the vector automatically /* * Second step: betas and variance */ RealMatrix cov_YYInverse = new LUDecompositionImpl(cov_YY).getSolver().getInverse(); RealVector beta = cov_YYInverse.preMultiply(cov_XY); double beta_0 = mean_X - beta.dotProduct(mean_Y); double variance = cov_XX - beta.dotProduct(cov_XY); /* * Third step: natural parameters (5 in total) */ /* * 1) theta_0 */ double theta_0 = beta_0 / variance; double[] theta_0array = { theta_0 }; /* * 2) theta_0Theta */ double variance2Inv = 1.0 / (2 * variance); RealVector theta_0Theta = beta.mapMultiply(-beta_0 / variance); ((CompoundVector) this.naturalParameters) .setXYbaseVector(new ArrayRealVector(theta_0array, theta_0Theta.getData())); /* * 3) theta_Minus1 */ double theta_Minus1 = -variance2Inv; /* * 4) theta_beta */ RealVector theta_beta = beta.mapMultiply(variance2Inv); /* * 5) theta_betaBeta */ RealMatrix theta_betaBeta = beta.outerProduct(beta).scalarMultiply(-variance2Inv * 2); /* * Store natural parameters */ RealMatrix natural_XY = new Array2DRowRealMatrix(nOfParents + 1, nOfParents + 1); double[] theta_Minus1array = { theta_Minus1 }; RealVector covXY = new ArrayRealVector(theta_Minus1array, theta_beta.getData()); natural_XY.setColumnVector(0, covXY); natural_XY.setRowVector(0, covXY); natural_XY.setSubMatrix(theta_betaBeta.getData(), 1, 1); ((CompoundVector) this.naturalParameters).setcovbaseVector(natural_XY); }
From source file:eu.amidst.core.exponentialfamily.EF_Normal_NormalParents.java
/** * {@inheritDoc}// w w w . j a v a 2 s . c o m */ @Override public void updateNaturalFromMomentParameters() { /* * First step: means and convariances */ CompoundVector globalMomentParam = (CompoundVector) this.momentParameters; double mean_X = globalMomentParam.getXYbaseMatrix().getEntry(0); RealVector mean_Y = globalMomentParam.getTheta_beta0BetaRV(); double cov_XX = globalMomentParam.getcovbaseMatrix().getEntry(0, 0) - mean_X * mean_X; RealMatrix cov_YY = globalMomentParam.getcovbaseMatrix().getSubMatrix(1, nOfParents, 1, nOfParents) .subtract(mean_Y.outerProduct(mean_Y)); RealVector cov_XY = globalMomentParam.getcovbaseMatrix().getSubMatrix(0, 0, 1, nOfParents).getRowVector(0) .subtract(mean_Y.mapMultiply(mean_X)); //RealVector cov_YX = cov_XY; //outerProduct transposes the vector automatically /* * Second step: betas and variance */ RealMatrix cov_YYInverse = new LUDecompositionImpl(cov_YY).getSolver().getInverse(); RealVector beta = cov_YYInverse.preMultiply(cov_XY); this.betas = new double[beta.getDimension()]; for (int i = 0; i < beta.getDimension(); i++) { this.betas[i] = beta.getEntry(i); } this.beta0 = mean_X - beta.dotProduct(mean_Y); this.variance = cov_XX - beta.dotProduct(cov_XY); }
From source file:eu.amidst.core.exponentialfamily.EF_Normal_NormalParents2.java
/** * {@inheritDoc}/*from www . j a v a 2 s . c o m*/ */ @Override public NaturalParameters getExpectedNaturalToParent(Variable parent, Map<Variable, MomentParameters> momentChildCoParents) { NaturalParameters naturalParameters = new ArrayVector(2); CompoundVector globalNaturalParameters = (CompoundVector) this.naturalParameters; int parentID = this.getConditioningVariables().indexOf(parent); RealVector theta_BetaBetaPrima = globalNaturalParameters.getTheta_BetaBetaRM().getRowVector(parentID);//.copy(); theta_BetaBetaPrima.setEntry(parentID, 0); double[] Yarray = new double[nOfParents]; for (int i = 0; i < nOfParents; i++) { Yarray[i] = momentChildCoParents.get(this.getConditioningVariables().get(i)).get(0); } RealVector YY_i = new ArrayRealVector(Yarray); naturalParameters.set(0, globalNaturalParameters.getTheta_beta0Beta()[parentID] + 2 * globalNaturalParameters.getTheta_Beta()[parentID] * momentChildCoParents.get(var).get(0) + 2 * theta_BetaBetaPrima.dotProduct(YY_i)); naturalParameters.set(1, globalNaturalParameters.getTheta_BetaBeta()[parentID][parentID]); return naturalParameters; }