程序包 weka.core.matrix

类 Matrix

java.lang.Object
weka.core.matrix.Matrix
所有已实现的接口:
Serializable, Cloneable, RevisionHandler
直接已知子类:
PaceMatrix

public class Matrix extends Object implements Cloneable, Serializable, RevisionHandler
Jama = Java Matrix class.

The Java Matrix Class provides the fundamental operations of numerical linear algebra. Various constructors create Matrices from two dimensional arrays of double precision floating point numbers. Various "gets" and "sets" provide access to submatrices and matrix elements. Several methods implement basic matrix arithmetic, including matrix addition and multiplication, matrix norms, and element-by-element array operations. Methods for reading and printing matrices are also included. All the operations in this version of the Matrix Class involve real matrices. Complex matrices may be handled in a future version.

Five fundamental matrix decompositions, which consist of pairs or triples of matrices, permutation vectors, and the like, produce results in five decomposition classes. These decompositions are accessed by the Matrix class to compute solutions of simultaneous linear equations, determinants, inverses and other matrix functions. The five decompositions are:

  • Cholesky Decomposition of symmetric, positive definite matrices.
  • LU Decomposition of rectangular matrices.
  • QR Decomposition of rectangular matrices.
  • Singular Value Decomposition of rectangular matrices.
  • Eigenvalue Decomposition of both symmetric and nonsymmetric square matrices.
Example of use:

Solve a linear system A x = b and compute the residual norm, ||b - A x||.

       double[][] vals = {{1.,2.,3},{4.,5.,6.},{7.,8.,10.}};
       Matrix A = new Matrix(vals);
       Matrix b = Matrix.random(3,1);
       Matrix x = A.solve(b);
       Matrix r = A.times(x).minus(b);
       double rnorm = r.normInf();
 

Adapted from the JAMA package. Additional methods are tagged with the @author tag.

版本:
$Revision: 1.8 $
作者:
The Mathworks and NIST, Fracpete (fracpete at waikato dot ac dot nz)
另请参阅:
  • 构造器详细资料

    • Matrix

      public Matrix(int m, int n)
      Construct an m-by-n matrix of zeros.
      参数:
      m - Number of rows.
      n - Number of colums.
    • Matrix

      public Matrix(int m, int n, double s)
      Construct an m-by-n constant matrix.
      参数:
      m - Number of rows.
      n - Number of colums.
      s - Fill the matrix with this scalar value.
    • Matrix

      public Matrix(double[][] A)
      Construct a matrix from a 2-D array.
      参数:
      A - Two-dimensional array of doubles.
      抛出:
      IllegalArgumentException - All rows must have the same length
      另请参阅:
    • Matrix

      public Matrix(double[][] A, int m, int n)
      Construct a matrix quickly without checking arguments.
      参数:
      A - Two-dimensional array of doubles.
      m - Number of rows.
      n - Number of colums.
    • Matrix

      public Matrix(double[] vals, int m)
      Construct a matrix from a one-dimensional packed array
      参数:
      vals - One-dimensional array of doubles, packed by columns (ala Fortran).
      m - Number of rows.
      抛出:
      IllegalArgumentException - Array length must be a multiple of m.
    • Matrix

      public Matrix(Reader r) throws Exception
      Reads a matrix from a reader. The first line in the file should contain the number of rows and columns. Subsequent lines contain elements of the matrix. (FracPete: taken from old weka.core.Matrix class)
      参数:
      r - the reader containing the matrix
      抛出:
      Exception - if an error occurs
      另请参阅:
  • 方法详细资料

    • constructWithCopy

      public static Matrix constructWithCopy(double[][] A)
      Construct a matrix from a copy of a 2-D array.
      参数:
      A - Two-dimensional array of doubles.
      抛出:
      IllegalArgumentException - All rows must have the same length
    • copy

      public Matrix copy()
      Make a deep copy of a matrix
    • clone

      public Object clone()
      Clone the Matrix object.
    • getArray

      public double[][] getArray()
      Access the internal two-dimensional array.
      返回:
      Pointer to the two-dimensional array of matrix elements.
    • getArrayCopy

      public double[][] getArrayCopy()
      Copy the internal two-dimensional array.
      返回:
      Two-dimensional array copy of matrix elements.
    • getColumnPackedCopy

      public double[] getColumnPackedCopy()
      Make a one-dimensional column packed copy of the internal array.
      返回:
      Matrix elements packed in a one-dimensional array by columns.
    • getRowPackedCopy

      public double[] getRowPackedCopy()
      Make a one-dimensional row packed copy of the internal array.
      返回:
      Matrix elements packed in a one-dimensional array by rows.
    • getRowDimension

      public int getRowDimension()
      Get row dimension.
      返回:
      m, the number of rows.
    • getColumnDimension

      public int getColumnDimension()
      Get column dimension.
      返回:
      n, the number of columns.
    • get

      public double get(int i, int j)
      Get a single element.
      参数:
      i - Row index.
      j - Column index.
      返回:
      A(i,j)
      抛出:
      ArrayIndexOutOfBoundsException
    • getMatrix

      public Matrix getMatrix(int i0, int i1, int j0, int j1)
      Get a submatrix.
      参数:
      i0 - Initial row index
      i1 - Final row index
      j0 - Initial column index
      j1 - Final column index
      返回:
      A(i0:i1,j0:j1)
      抛出:
      ArrayIndexOutOfBoundsException - Submatrix indices
    • getMatrix

      public Matrix getMatrix(int[] r, int[] c)
      Get a submatrix.
      参数:
      r - Array of row indices.
      c - Array of column indices.
      返回:
      A(r(:),c(:))
      抛出:
      ArrayIndexOutOfBoundsException - Submatrix indices
    • getMatrix

      public Matrix getMatrix(int i0, int i1, int[] c)
      Get a submatrix.
      参数:
      i0 - Initial row index
      i1 - Final row index
      c - Array of column indices.
      返回:
      A(i0:i1,c(:))
      抛出:
      ArrayIndexOutOfBoundsException - Submatrix indices
    • getMatrix

      public Matrix getMatrix(int[] r, int j0, int j1)
      Get a submatrix.
      参数:
      r - Array of row indices.
      j0 - Initial column index
      j1 - Final column index
      返回:
      A(r(:),j0:j1)
      抛出:
      ArrayIndexOutOfBoundsException - Submatrix indices
    • set

      public void set(int i, int j, double s)
      Set a single element.
      参数:
      i - Row index.
      j - Column index.
      s - A(i,j).
      抛出:
      ArrayIndexOutOfBoundsException
    • setMatrix

      public void setMatrix(int i0, int i1, int j0, int j1, Matrix X)
      Set a submatrix.
      参数:
      i0 - Initial row index
      i1 - Final row index
      j0 - Initial column index
      j1 - Final column index
      X - A(i0:i1,j0:j1)
      抛出:
      ArrayIndexOutOfBoundsException - Submatrix indices
    • setMatrix

      public void setMatrix(int[] r, int[] c, Matrix X)
      Set a submatrix.
      参数:
      r - Array of row indices.
      c - Array of column indices.
      X - A(r(:),c(:))
      抛出:
      ArrayIndexOutOfBoundsException - Submatrix indices
    • setMatrix

      public void setMatrix(int[] r, int j0, int j1, Matrix X)
      Set a submatrix.
      参数:
      r - Array of row indices.
      j0 - Initial column index
      j1 - Final column index
      X - A(r(:),j0:j1)
      抛出:
      ArrayIndexOutOfBoundsException - Submatrix indices
    • setMatrix

      public void setMatrix(int i0, int i1, int[] c, Matrix X)
      Set a submatrix.
      参数:
      i0 - Initial row index
      i1 - Final row index
      c - Array of column indices.
      X - A(i0:i1,c(:))
      抛出:
      ArrayIndexOutOfBoundsException - Submatrix indices
    • isSymmetric

      public boolean isSymmetric()
      Returns true if the matrix is symmetric. (FracPete: taken from old weka.core.Matrix class)
      返回:
      boolean true if matrix is symmetric.
    • isSquare

      public boolean isSquare()
      returns whether the matrix is a square matrix or not.
      返回:
      true if the matrix is a square matrix
    • transpose

      public Matrix transpose()
      Matrix transpose.
      返回:
      A'
    • norm1

      public double norm1()
      One norm
      返回:
      maximum column sum.
    • norm2

      public double norm2()
      Two norm
      返回:
      maximum singular value.
    • normInf

      public double normInf()
      Infinity norm
      返回:
      maximum row sum.
    • normF

      public double normF()
      Frobenius norm
      返回:
      sqrt of sum of squares of all elements.
    • uminus

      public Matrix uminus()
      Unary minus
      返回:
      -A
    • plus

      public Matrix plus(Matrix B)
      C = A + B
      参数:
      B - another matrix
      返回:
      A + B
    • plusEquals

      public Matrix plusEquals(Matrix B)
      A = A + B
      参数:
      B - another matrix
      返回:
      A + B
    • minus

      public Matrix minus(Matrix B)
      C = A - B
      参数:
      B - another matrix
      返回:
      A - B
    • minusEquals

      public Matrix minusEquals(Matrix B)
      A = A - B
      参数:
      B - another matrix
      返回:
      A - B
    • arrayTimes

      public Matrix arrayTimes(Matrix B)
      Element-by-element multiplication, C = A.*B
      参数:
      B - another matrix
      返回:
      A.*B
    • arrayTimesEquals

      public Matrix arrayTimesEquals(Matrix B)
      Element-by-element multiplication in place, A = A.*B
      参数:
      B - another matrix
      返回:
      A.*B
    • arrayRightDivide

      public Matrix arrayRightDivide(Matrix B)
      Element-by-element right division, C = A./B
      参数:
      B - another matrix
      返回:
      A./B
    • arrayRightDivideEquals

      public Matrix arrayRightDivideEquals(Matrix B)
      Element-by-element right division in place, A = A./B
      参数:
      B - another matrix
      返回:
      A./B
    • arrayLeftDivide

      public Matrix arrayLeftDivide(Matrix B)
      Element-by-element left division, C = A.\B
      参数:
      B - another matrix
      返回:
      A.\B
    • arrayLeftDivideEquals

      public Matrix arrayLeftDivideEquals(Matrix B)
      Element-by-element left division in place, A = A.\B
      参数:
      B - another matrix
      返回:
      A.\B
    • times

      public Matrix times(double s)
      Multiply a matrix by a scalar, C = s*A
      参数:
      s - scalar
      返回:
      s*A
    • timesEquals

      public Matrix timesEquals(double s)
      Multiply a matrix by a scalar in place, A = s*A
      参数:
      s - scalar
      返回:
      replace A by s*A
    • times

      public Matrix times(Matrix B)
      Linear algebraic matrix multiplication, A * B
      参数:
      B - another matrix
      返回:
      Matrix product, A * B
      抛出:
      IllegalArgumentException - Matrix inner dimensions must agree.
    • lu

      public LUDecomposition lu()
      LU Decomposition
      返回:
      LUDecomposition
      另请参阅:
    • qr

      public QRDecomposition qr()
      QR Decomposition
      返回:
      QRDecomposition
      另请参阅:
    • chol

      public CholeskyDecomposition chol()
      Cholesky Decomposition
      返回:
      CholeskyDecomposition
      另请参阅:
    • svd

      Singular Value Decomposition
      返回:
      SingularValueDecomposition
      另请参阅:
    • eig

      Eigenvalue Decomposition
      返回:
      EigenvalueDecomposition
      另请参阅:
    • solve

      public Matrix solve(Matrix B)
      Solve A*X = B
      参数:
      B - right hand side
      返回:
      solution if A is square, least squares solution otherwise
    • solveTranspose

      public Matrix solveTranspose(Matrix B)
      Solve X*A = B, which is also A'*X' = B'
      参数:
      B - right hand side
      返回:
      solution if A is square, least squares solution otherwise.
    • inverse

      public Matrix inverse()
      Matrix inverse or pseudoinverse
      返回:
      inverse(A) if A is square, pseudoinverse otherwise.
    • sqrt

      public Matrix sqrt()
      returns the square root of the matrix, i.e., X from the equation X*X = A.
      Steps in the Calculation (see sqrtm in Matlab):
      1. perform eigenvalue decomposition
        [V,D]=eig(A)
      2. take the square root of all elements in D (only the ones with positive sign are considered for further computation)
        S=sqrt(D)
      3. calculate the root
        X=V*S/V, which can be also written as X=(V'\(V*S)')'

      Note: since this method uses other high-level methods, it generates several instances of matrices. This can be problematic with large matrices.

      Examples:

      1.   X =
           5   -4    1    0    0
          -4    6   -4    1    0
           1   -4    6   -4    1
           0    1   -4    6   -4
           0    0    1   -4    5
         
          sqrt(X) =
           2   -1   -0   -0   -0 
          -1    2   -1    0   -0 
           0   -1    2   -1    0 
          -0    0   -1    2   -1 
          -0   -0   -0   -1    2 
          
          Matrix m = new Matrix(new double[][]{{5,-4,1,0,0},{-4,6,-4,1,0},{1,-4,6,-4,1},{0,1,-4,6,-4},{0,0,1,-4,5}});
           
      2.   X =
           7   10
          15   22
          
          sqrt(X) =
          1.5667    1.7408
          2.6112    4.1779
         
          Matrix m = new Matrix(new double[][]{{7, 10},{15, 22}});
           
      返回:
      sqrt(A)
    • regression

      public LinearRegression regression(Matrix y, double ridge)
      Performs a (ridged) linear regression. (FracPete: taken from old weka.core.Matrix class)
      参数:
      y - the dependent variable vector
      ridge - the ridge parameter
      返回:
      the coefficients
      抛出:
      IllegalArgumentException - if not successful
    • regression

      public final LinearRegression regression(Matrix y, double[] w, double ridge)
      Performs a weighted (ridged) linear regression. (FracPete: taken from old weka.core.Matrix class)
      参数:
      y - the dependent variable vector
      w - the array of data point weights
      ridge - the ridge parameter
      返回:
      the coefficients
      抛出:
      IllegalArgumentException - if the wrong number of weights were provided.
    • det

      public double det()
      Matrix determinant
      返回:
      determinant
    • rank

      public int rank()
      Matrix rank
      返回:
      effective numerical rank, obtained from SVD.
    • cond

      public double cond()
      Matrix condition (2 norm)
      返回:
      ratio of largest to smallest singular value.
    • trace

      public double trace()
      Matrix trace.
      返回:
      sum of the diagonal elements.
    • random

      public static Matrix random(int m, int n)
      Generate matrix with random elements
      参数:
      m - Number of rows.
      n - Number of colums.
      返回:
      An m-by-n matrix with uniformly distributed random elements.
    • identity

      public static Matrix identity(int m, int n)
      Generate identity matrix
      参数:
      m - Number of rows.
      n - Number of colums.
      返回:
      An m-by-n matrix with ones on the diagonal and zeros elsewhere.
    • print

      public void print(int w, int d)
      Print the matrix to stdout. Line the elements up in columns with a Fortran-like 'Fw.d' style format.
      参数:
      w - Column width.
      d - Number of digits after the decimal.
    • print

      public void print(PrintWriter output, int w, int d)
      Print the matrix to the output stream. Line the elements up in columns with a Fortran-like 'Fw.d' style format.
      参数:
      output - Output stream.
      w - Column width.
      d - Number of digits after the decimal.
    • print

      public void print(NumberFormat format, int width)
      Print the matrix to stdout. Line the elements up in columns. Use the format object, and right justify within columns of width characters. Note that is the matrix is to be read back in, you probably will want to use a NumberFormat that is set to US Locale.
      参数:
      format - A Formatting object for individual elements.
      width - Field width for each column.
      另请参阅:
    • print

      public void print(PrintWriter output, NumberFormat format, int width)
      Print the matrix to the output stream. Line the elements up in columns. Use the format object, and right justify within columns of width characters. Note that is the matrix is to be read back in, you probably will want to use a NumberFormat that is set to US Locale.
      参数:
      output - the output stream.
      format - A formatting object to format the matrix elements
      width - Column width.
      另请参阅:
    • read

      public static Matrix read(BufferedReader input) throws IOException
      Read a matrix from a stream. The format is the same the print method, so printed matrices can be read back in (provided they were printed using US Locale). Elements are separated by whitespace, all the elements for each row appear on a single line, the last row is followed by a blank line.

      Note: This format differs from the one that can be read via the Matrix(Reader) constructor! For that format, the write(Writer) method is used (from the original weka.core.Matrix class).

      参数:
      input - the input stream.
      抛出:
      IOException
      另请参阅:
    • write

      public void write(Writer w) throws Exception
      Writes out a matrix. The format can be read via the Matrix(Reader) constructor. (FracPete: taken from old weka.core.Matrix class)
      参数:
      w - the output Writer
      抛出:
      Exception - if an error occurs
      另请参阅:
    • toString

      public String toString()
      Converts a matrix to a string. (FracPete: taken from old weka.core.Matrix class)
      覆盖:
      toString 在类中 Object
      返回:
      the converted string
    • toMatlab

      public String toMatlab()
      converts the Matrix into a single line Matlab string: matrix is enclosed by parentheses, rows are separated by semicolon and single cells by blanks, e.g., [1 2; 3 4].
      返回:
      the matrix in Matlab single line format
    • parseMatlab

      public static Matrix parseMatlab(String matlab) throws Exception
      creates a matrix from the given Matlab string.
      参数:
      matlab - the matrix in matlab format
      返回:
      the matrix represented by the given string
      抛出:
      Exception
      另请参阅:
    • getRevision

      public String getRevision()
      Returns the revision string.
      指定者:
      getRevision 在接口中 RevisionHandler
      返回:
      the revision
    • main

      public static void main(String[] args)
      Main method for testing this class.