Example usage for org.apache.commons.math.linear ArrayRealVector ArrayRealVector

List of usage examples for org.apache.commons.math.linear ArrayRealVector ArrayRealVector

Introduction

In this page you can find the example usage for org.apache.commons.math.linear ArrayRealVector ArrayRealVector.

Prototype

public ArrayRealVector(double[] v1, double[] v2) 

Source Link

Document

Construct a vector by appending one vector to another vector.

Usage

From source file:eu.amidst.core.exponentialfamily.EF_Normal_NormalParents2.java

/**
 * {@inheritDoc}//www .j a  v  a 2  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}/*from  w w  w  .j a v a  2  s. com*/
 */
@Override
public SufficientStatistics getSufficientStatistics(Assignment data) {
    CompoundVector vectorSS = this.createEmtpyCompoundVector();

    double[] Xarray = { data.getValue(this.var) };

    double[] Yarray = this.parents.stream().mapToDouble(w -> data.getValue(w)).toArray();
    RealVector XYRealVector = new ArrayRealVector(Xarray, Yarray);
    vectorSS.setXYbaseVector(XYRealVector);

    RealMatrix covRealmatrix = XYRealVector.outerProduct(XYRealVector);

    vectorSS.setcovbaseVector(covRealmatrix);

    return vectorSS;
}

From source file:eu.amidst.core.exponentialfamily.EF_Normal_NormalParents.java

/**
 * {@inheritDoc}/*from  w  w w  . j a  v  a2s  .  c o  m*/
 */
@Override
public SufficientStatistics createInitSufficientStatistics() {
    CompoundVector vectorSS = this.createEmtpyCompoundVector();

    double[] Xarray = { 0.0 };

    double[] Yarray = this.parents.stream().mapToDouble(w -> 0.0).toArray();
    RealVector XYRealVector = new ArrayRealVector(Xarray, Yarray);
    vectorSS.setXYbaseVector(XYRealVector);

    RealMatrix covRealmatrix = new Array2DRowRealMatrix(Yarray.length + 1, Yarray.length + 1);

    //We perform the "laplace" correction in that way to break symmetric covariance matrixes.
    Random rand = new Random(0);
    for (int i = 0; i < Yarray.length + 1; i++) {
        for (int j = 0; j < Yarray.length + 1; j++) {
            covRealmatrix.addToEntry(i, j, rand.nextDouble() + 0.01);
        }
    }
    //covRealmatrix = covRealmatrix.scalarAdd(1.0);

    vectorSS.setcovbaseVector(covRealmatrix);

    return vectorSS;
}

From source file:org.deegree.geometry.linearization.CurveLinearizer.java

private double[] solveLinearEquation(double[][] matrixA, double[] vectorb) {

    RealMatrix coefficients = new Array2DRowRealMatrix(matrixA, false);

    // LU-decomposition
    DecompositionSolver solver = new LUDecompositionImpl(coefficients).getSolver();

    RealVector constants = new ArrayRealVector(vectorb, false);
    RealVector solution = null;//  w w  w.j  av a2  s . com
    try {
        solution = solver.solve(constants);
    } catch (SingularMatrixException e) {
        LOG.error(e.getLocalizedMessage());
        e.printStackTrace();
    }
    return solution.getData();
}