Example usage for org.apache.commons.math.linear MatrixUtils createRealMatrix

List of usage examples for org.apache.commons.math.linear MatrixUtils createRealMatrix

Introduction

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

Prototype

public static RealMatrix createRealMatrix(double[][] data) 

Source Link

Document

Returns a RealMatrix whose entries are the the values in the the input array.

Usage

From source file:gda.spring.propertyeditors.RealMatrixPropertyEditor.java

@Override
public void setAsText(String text) throws IllegalArgumentException {
    arrayPropEditor.setAsText(text);//from w w w . java 2  s . co m
    double[][] matrixValues = arrayPropEditor.getValue();
    RealMatrix matrix = MatrixUtils.createRealMatrix(matrixValues);
    setValue(matrix);
}

From source file:BackEnd.Observer.java

/**
 * bod pozorovatela zo vetkym ?o tam ma byt
 * @param B indukcia mag pola ako fazorvektor TESLA
 * @param E intenzita el pola ako fazorvektor V/m
 * @param poloha polohovy vektor //w  w  w. j  a  va 2s.c o  m
 * @param GeoMatrix_A matica geometrickch koeficientov 
 * 
 */
public Observer(FazorVektor B, FazorVektor E, DPoint poloha, double[][] GeoMatrix_A) {
    this.B = B;
    this.E = E;
    this.poloha = poloha;
    this.GeoMatrix_A = MatrixUtils.createRealMatrix(GeoMatrix_A);
}

From source file:BackEnd.Observer.java

public Observer(FazorVektor B, FazorVektor E, DPoint poloha, double[][] GeoMatrix_A, double parameter) {
    this.B = B;//from   w w  w . ja v a2  s . c  om
    this.E = E;
    this.poloha = poloha;
    this.parameter = parameter;
    this.GeoMatrix_A = MatrixUtils.createRealMatrix(GeoMatrix_A);
}

From source file:gda.images.camera.ScannableSampleMovementServiceTest.java

public void testWithNonIdentityAxisOrientationMatrix() throws Exception {
    sms.setOmegaDirection(OmegaDirection.ANTICLOCKWISE);
    sms.setAxisOrientationMatrix(//from   w w w  .  ja v a 2  s  .  c o m
            MatrixUtils.createRealMatrix(new double[][] { { 0, 1, 0 }, { 0, 0, 1 }, { 1, 0, 0 } }));
    sms.afterPropertiesSet();

    omega.moveTo(90);

    assertPositionsEqual(ZERO_POSITION, sampleXyz.getPositionArray());
    assertEquals(90, omega.getAngle(), DELTA);

    sms.moveSampleByMicrons(10, 20, 30);

    assertPositionsEqual(new double[] { -30, 20, 10 }, sampleXyz.getPositionArray());
    assertEquals(90, omega.getAngle(), DELTA);
}

From source file:jml.matlab.utils.SingularValueDecompositionImpl.java

/**
 * Calculates the compact Singular Value Decomposition of the given matrix.
 *
 * @param matrix Matrix to decompose.//from  w w  w.ja  va  2 s.co m
 */
public SingularValueDecompositionImpl(RealMatrix matrix) {
    double[][] U, V;

    // Derived from LINPACK code.
    // Initialize.
    double[][] A;
    m = matrix.getRowDimension();
    n = matrix.getColumnDimension();

    if (matrix.getRowDimension() < matrix.getColumnDimension()) {
        transposed = true;
        A = matrix.transpose().getData();
        m = matrix.getColumnDimension();
        n = matrix.getRowDimension();
    } else {
        transposed = false;
        A = matrix.getData();
        m = matrix.getRowDimension();
        n = matrix.getColumnDimension();
    }

    int nu = Math.min(m, n);
    s = new double[Math.min(m + 1, n)];
    U = new double[m][nu];
    V = new double[n][n];
    double[] e = new double[n];
    double[] work = new double[m];
    boolean wantu = true;
    boolean wantv = true;

    // Reduce A to bidiagonal form, storing the diagonal elements
    // in s and the super-diagonal elements in e.
    int nct = Math.min(m - 1, n);
    int nrt = Math.max(0, Math.min(n - 2, m));
    for (int k = 0; k < Math.max(nct, nrt); k++) {
        if (k < nct) {

            // Compute the transformation for the k-th column and
            // place the k-th diagonal in s[k].
            // Compute 2-norm of k-th column without under/overflow.
            s[k] = 0;
            for (int i = k; i < m; i++) {
                s[k] = hypot(s[k], A[i][k]);
            }
            if (s[k] != 0.0) {
                if (A[k][k] < 0.0) {
                    s[k] = -s[k];
                }
                for (int i = k; i < m; i++) {
                    A[i][k] /= s[k];
                }
                A[k][k] += 1.0;
            }
            s[k] = -s[k];
        }
        for (int j = k + 1; j < n; j++) {
            if ((k < nct) & (s[k] != 0.0)) {

                // Apply the transformation.

                double t = 0;
                for (int i = k; i < m; i++) {
                    t += A[i][k] * A[i][j];
                }
                t = -t / A[k][k];
                for (int i = k; i < m; i++) {
                    A[i][j] += t * A[i][k];
                }
            }

            // Place the k-th row of A into e for the
            // subsequent calculation of the row transformation.
            e[j] = A[k][j];
        }
        if (wantu & (k < nct)) {

            // Place the transformation in U for subsequent back
            // multiplication.

            for (int i = k; i < m; i++) {
                U[i][k] = A[i][k];
            }
        }
        if (k < nrt) {

            // Compute the k-th row transformation and place the
            // k-th super-diagonal in e[k].
            // Compute 2-norm without under/overflow.
            e[k] = 0;
            for (int i = k + 1; i < n; i++) {
                e[k] = hypot(e[k], e[i]);
            }
            if (e[k] != 0.0) {
                if (e[k + 1] < 0.0) {
                    e[k] = -e[k];
                }
                for (int i = k + 1; i < n; i++) {
                    e[i] /= e[k];
                }
                e[k + 1] += 1.0;
            }
            e[k] = -e[k];
            if ((k + 1 < m) & (e[k] != 0.0)) {

                // Apply the transformation.

                for (int i = k + 1; i < m; i++) {
                    work[i] = 0.0;
                }
                for (int j = k + 1; j < n; j++) {
                    for (int i = k + 1; i < m; i++) {
                        work[i] += e[j] * A[i][j];
                    }
                }
                for (int j = k + 1; j < n; j++) {
                    double t = -e[j] / e[k + 1];
                    for (int i = k + 1; i < m; i++) {
                        A[i][j] += t * work[i];
                    }
                }
            }
            if (wantv) {

                // Place the transformation in V for subsequent
                // back multiplication.
                for (int i = k + 1; i < n; i++) {
                    V[i][k] = e[i];
                }
            }
        }
    }

    // Set up the final bidiagonal matrix or order p.
    int p = Math.min(n, m + 1);
    if (nct < n) {
        s[nct] = A[nct][nct];
    }
    if (m < p) {
        s[p - 1] = 0.0;
    }
    if (nrt + 1 < p) {
        e[nrt] = A[nrt][p - 1];
    }
    e[p - 1] = 0.0;

    // If required, generate U.
    if (wantu) {
        for (int j = nct; j < nu; j++) {
            for (int i = 0; i < m; i++) {
                U[i][j] = 0.0;
            }
            U[j][j] = 1.0;
        }
        for (int k = nct - 1; k >= 0; k--) {
            if (s[k] != 0.0) {
                for (int j = k + 1; j < nu; j++) {
                    double t = 0;
                    for (int i = k; i < m; i++) {
                        t += U[i][k] * U[i][j];
                    }
                    t = -t / U[k][k];
                    for (int i = k; i < m; i++) {
                        U[i][j] += t * U[i][k];
                    }
                }
                for (int i = k; i < m; i++) {
                    U[i][k] = -U[i][k];
                }
                U[k][k] = 1.0 + U[k][k];
                for (int i = 0; i < k - 1; i++) {
                    U[i][k] = 0.0;
                }
            } else {
                for (int i = 0; i < m; i++) {
                    U[i][k] = 0.0;
                }
                U[k][k] = 1.0;
            }
        }
    }

    // If required, generate V.
    if (wantv) {
        for (int k = n - 1; k >= 0; k--) {
            if ((k < nrt) & (e[k] != 0.0)) {
                for (int j = k + 1; j < nu; j++) {
                    double t = 0;
                    for (int i = k + 1; i < n; i++) {
                        t += V[i][k] * V[i][j];
                    }
                    t = -t / V[k + 1][k];
                    for (int i = k + 1; i < n; i++) {
                        V[i][j] += t * V[i][k];
                    }
                }
            }
            for (int i = 0; i < n; i++) {
                V[i][k] = 0.0;
            }
            V[k][k] = 1.0;
        }
    }

    // Main iteration loop for the singular values.
    int pp = p - 1;
    int iter = 0;
    double eps = Math.pow(2.0, -52.0);
    double tiny = Math.pow(2.0, -966.0);
    while (p > 0) {
        int k, kase;

        // Here is where a test for too many iterations would go.

        // This section of the program inspects for
        // negligible elements in the s and e arrays.  On
        // completion the variables kase and k are set as follows.

        // kase = 1     if s(p) and e[k-1] are negligible and k<p
        // kase = 2     if s(k) is negligible and k<p
        // kase = 3     if e[k-1] is negligible, k<p, and
        //              s(k), ..., s(p) are not negligible (qr step).
        // kase = 4     if e(p-1) is negligible (convergence).

        for (k = p - 2; k >= -1; k--) {
            if (k == -1) {
                break;
            }
            if (Math.abs(e[k]) <= tiny + eps * (Math.abs(s[k]) + Math.abs(s[k + 1]))) {
                e[k] = 0.0;
                break;
            }
        }
        if (k == p - 2) {
            kase = 4;
        } else {
            int ks;
            for (ks = p - 1; ks >= k; ks--) {
                if (ks == k) {
                    break;
                }
                double t = (ks != p ? Math.abs(e[ks]) : 0.) + (ks != k + 1 ? Math.abs(e[ks - 1]) : 0.);
                if (Math.abs(s[ks]) <= tiny + eps * t) {
                    s[ks] = 0.0;
                    break;
                }
            }
            if (ks == k) {
                kase = 3;
            } else if (ks == p - 1) {
                kase = 1;
            } else {
                kase = 2;
                k = ks;
            }
        }
        k++;

        // Perform the task indicated by kase.

        switch (kase) {

        // Deflate negligible s(p).

        case 1: {
            double f = e[p - 2];
            e[p - 2] = 0.0;
            for (int j = p - 2; j >= k; j--) {
                double t = hypot(s[j], f);
                double cs = s[j] / t;
                double sn = f / t;
                s[j] = t;
                if (j != k) {
                    f = -sn * e[j - 1];
                    e[j - 1] = cs * e[j - 1];
                }
                if (wantv) {
                    for (int i = 0; i < n; i++) {
                        t = cs * V[i][j] + sn * V[i][p - 1];
                        V[i][p - 1] = -sn * V[i][j] + cs * V[i][p - 1];
                        V[i][j] = t;
                    }
                }
            }
        }
            break;

        // Split at negligible s(k).

        case 2: {
            double f = e[k - 1];
            e[k - 1] = 0.0;
            for (int j = k; j < p; j++) {
                double t = hypot(s[j], f);
                double cs = s[j] / t;
                double sn = f / t;
                s[j] = t;
                f = -sn * e[j];
                e[j] = cs * e[j];
                if (wantu) {
                    for (int i = 0; i < m; i++) {
                        t = cs * U[i][j] + sn * U[i][k - 1];
                        U[i][k - 1] = -sn * U[i][j] + cs * U[i][k - 1];
                        U[i][j] = t;
                    }
                }
            }
        }
            break;

        // Perform one qr step.

        case 3: {

            // Calculate the shift.

            double scale = Math.max(
                    Math.max(Math.max(Math.max(Math.abs(s[p - 1]), Math.abs(s[p - 2])), Math.abs(e[p - 2])),
                            Math.abs(s[k])),
                    Math.abs(e[k]));
            double sp = s[p - 1] / scale;
            double spm1 = s[p - 2] / scale;
            double epm1 = e[p - 2] / scale;
            double sk = s[k] / scale;
            double ek = e[k] / scale;
            double b = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2.0;
            double c = (sp * epm1) * (sp * epm1);
            double shift = 0.0;
            if ((b != 0.0) | (c != 0.0)) {
                shift = Math.sqrt(b * b + c);
                if (b < 0.0) {
                    shift = -shift;
                }
                shift = c / (b + shift);
            }
            double f = (sk + sp) * (sk - sp) + shift;
            double g = sk * ek;

            // Chase zeros.

            for (int j = k; j < p - 1; j++) {
                double t = hypot(f, g);
                double cs = f / t;
                double sn = g / t;
                if (j != k) {
                    e[j - 1] = t;
                }
                f = cs * s[j] + sn * e[j];
                e[j] = cs * e[j] - sn * s[j];
                g = sn * s[j + 1];
                s[j + 1] = cs * s[j + 1];
                if (wantv) {
                    for (int i = 0; i < n; i++) {
                        t = cs * V[i][j] + sn * V[i][j + 1];
                        V[i][j + 1] = -sn * V[i][j] + cs * V[i][j + 1];
                        V[i][j] = t;
                    }
                }
                t = hypot(f, g);
                cs = f / t;
                sn = g / t;
                s[j] = t;
                f = cs * e[j] + sn * s[j + 1];
                s[j + 1] = -sn * e[j] + cs * s[j + 1];
                g = sn * e[j + 1];
                e[j + 1] = cs * e[j + 1];
                if (wantu && (j < m - 1)) {
                    for (int i = 0; i < m; i++) {
                        t = cs * U[i][j] + sn * U[i][j + 1];
                        U[i][j + 1] = -sn * U[i][j] + cs * U[i][j + 1];
                        U[i][j] = t;
                    }
                }
            }
            e[p - 2] = f;
            iter = iter + 1;
        }
            break;

        // Convergence.

        case 4: {

            // Make the singular values positive.

            if (s[k] <= 0.0) {
                s[k] = (s[k] < 0.0 ? -s[k] : 0.0);
                if (wantv) {
                    for (int i = 0; i <= pp; i++) {
                        V[i][k] = -V[i][k];
                    }
                }
            }

            // Order the singular values.

            while (k < pp) {
                if (s[k] >= s[k + 1]) {
                    break;
                }
                double t = s[k];
                s[k] = s[k + 1];
                s[k + 1] = t;
                if (wantv && (k < n - 1)) {
                    for (int i = 0; i < n; i++) {
                        t = V[i][k + 1];
                        V[i][k + 1] = V[i][k];
                        V[i][k] = t;
                    }
                }
                if (wantu && (k < m - 1)) {
                    for (int i = 0; i < m; i++) {
                        t = U[i][k + 1];
                        U[i][k + 1] = U[i][k];
                        U[i][k] = t;
                    }
                }
                k++;
            }
            iter = 0;
            p--;
        }
            break;
        }
    }

    if (!transposed) {
        cachedU = MatrixUtils.createRealMatrix(U);
        cachedV = MatrixUtils.createRealMatrix(V);
    } else {
        cachedU = MatrixUtils.createRealMatrix(V);
        cachedV = MatrixUtils.createRealMatrix(U);

    }
}

From source file:org.micromanager.plugins.magellan.propsandcovariants.LaserPredNet.java

public byte[] forwardPass(double[][] x) {
    double[] ones = new double[x.length];
    Arrays.fill(ones, 1.0);/* w ww.j a  va  2s  . c o m*/
    Array2DRowRealMatrix onesMat = new Array2DRowRealMatrix(ones);
    //assume x is properly normalized
    new Array2DRowRealMatrix(x[0]);
    Array2DRowRealMatrix xMat = (Array2DRowRealMatrix) MatrixUtils.createRealMatrix(x);
    Array2DRowRealMatrix h = xMat.multiply(W1_).add(onesMat.multiply(B1_));
    relu(h);
    Array2DRowRealMatrix z = (Array2DRowRealMatrix) h.multiply(W2_.transpose()).add(onesMat.multiply(B2_));
    byte[] powers = new byte[z.getRowDimension() * z.getColumnDimension()];
    for (int i = 0; i < powers.length; i++) {
        powers[i] = (byte) Math.max(0, Math.min(255, z.getEntry(i, 0)));
    }
    return powers;
}

From source file:org.micromanager.plugins.magellan.propsandcovariants.LaserPredNet.java

private void readModel(String filename) throws FileNotFoundException {
    Scanner s = new Scanner(new File(filename));
    double[][] w1 = new double[N_INPUTS][N_HIDDENS];
    double[][] b1 = new double[1][N_HIDDENS];
    double[][] w2 = new double[1][N_HIDDENS];
    double[][] b2 = new double[1][1];
    double[][] var = null;
    int index = 0;
    int matCount = 0;
    while (s.hasNext()) {
        String line = s.nextLine();
        if (line.toLowerCase().startsWith("fc") || line.toLowerCase().startsWith("output")) {
            //new variable
            if (matCount == 0) {
                var = w1;
            } else if (matCount == 1) {
                var = b1;
            } else if (matCount == 2) {
                var = w2;
            } else {
                var = b2;
            }//w ww .  j  a  v a2  s  .c o  m
            matCount++;
            index = 0;
        } else if (line.toLowerCase().startsWith("distance")) {
            break;
        } else {
            String[] entries = line.split(",");
            for (int i = 0; i < entries.length; i++) {
                try {
                    var[index / var[0].length][index % var[0].length] = Double.parseDouble(entries[i]);
                } catch (Exception e) {
                    int t = 6;
                }
                index++;
            }
        }
    }
    String meanStr = s.nextLine(); // means
    String[] entries = meanStr.split(",");
    distanceMeans_ = new double[N_HIST_BINS];
    for (int i = 0; i < entries.length; i++) {
        distanceMeans_[i] = Double.parseDouble(entries[i]);
    }
    s.nextLine(); // burn SD title
    String sdStr = s.nextLine();
    entries = sdStr.split(",");
    distanceSDs_ = new double[N_HIST_BINS];
    for (int i = 0; i < entries.length; i++) {
        distanceSDs_[i] = Double.parseDouble(entries[i]);
    }
    s.nextLine(); // burn test values title
    int numTestVals = 4;
    testValuesOutput_ = new double[numTestVals];
    testValues_ = new double[numTestVals][N_HIST_BINS + 3];
    for (int i = 0; i < numTestVals; i++) {
        String valsString = s.nextLine();
        entries = valsString.split(",");
        for (int k = 0; k < entries.length; k++) {
            testValues_[i][k] = Double.parseDouble(entries[k]);
        }
        testValuesOutput_[i] = Double.parseDouble(s.nextLine());
    }

    //convert model to Apache commons matrices
    W1_ = (Array2DRowRealMatrix) MatrixUtils.createRealMatrix(w1);
    B1_ = (Array2DRowRealMatrix) MatrixUtils.createRealMatrix(b1);
    W2_ = (Array2DRowRealMatrix) MatrixUtils.createRealMatrix(w2);
    B2_ = (Array2DRowRealMatrix) MatrixUtils.createRealMatrix(b2);

    //Run tests
    byte[] output = forwardPass(testValues_);
    for (int k = 0; k < output.length; k++) {
        System.out.println("Calculated: " + (output[k] & 0xff) + "\tGround truth:" + testValuesOutput_[k]);
    }

}