/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.math.matrix; import org.apache.commons.lang.Validate; /** * Various utility classes for matrices. */ public final class DoubleMatrixUtils { //TODO shouldn't these all be separate calculators implementing Function? private DoubleMatrixUtils() { } /** * The transpose of a matrix $\mathbf{A}$ with elements $A_{ij}$ is $A_{ji}$. * @param matrix The matrix to transpose, not null * @return The transposed matrix */ public static DoubleMatrix2D getTranspose(final DoubleMatrix2D matrix) { final int rows = matrix.getNumberOfRows(); final int columns = matrix.getNumberOfColumns(); final double[][] primitives = new double[columns][rows]; for (int i = 0; i < columns; i++) { for (int j = 0; j < rows; j++) { primitives[i][j] = matrix.getEntry(j, i); } } return new DoubleMatrix2D(primitives); } /** * The identity matrix is a matrix with diagonal elements equals to one and zero elsewhere. * @param dimension The dimension of matrix required, not negative or zero * @return The identity matrix */ public static DoubleMatrix2D getIdentityMatrix2D(final int dimension) { Validate.isTrue(dimension >= 0, "dimension must be >= 0"); if (dimension == 0) { return DoubleMatrix2D.EMPTY_MATRIX; } if (dimension == 1) { return new DoubleMatrix2D(new double[][] {new double[] {1}}); } final double[][] data = new double[dimension][dimension]; for (int i = 0; i < dimension; i++) { data[i][i] = 1; } return new DoubleMatrix2D(data); } /** * Converts a vector into a diagonal matrix. * @param vector The vector, not null * @return A diagonal matrix */ public static DoubleMatrix2D getTwoDimensionalDiagonalMatrix(final DoubleMatrix1D vector) { Validate.notNull(vector); final int n = vector.getNumberOfElements(); if (n == 0) { return DoubleMatrix2D.EMPTY_MATRIX; } final double[][] data = new double[n][n]; for (int i = 0; i < n; i++) { data[i][i] = vector.getEntry(i); } return new DoubleMatrix2D(data); } /** * Converts a vector into a diagonal matrix. * @param vector The vector, not null * @return A diagonal matrix */ public static DoubleMatrix2D getTwoDimensionalDiagonalMatrix(final double[] vector) { Validate.notNull(vector); return getTwoDimensionalDiagonalMatrix(new DoubleMatrix1D(vector)); } }