Class AbstractMatrix<T>

  • All Implemented Interfaces:
    java.lang.Iterable<T>, Matrix<T>
    Direct Known Subclasses:
    AbstractMatrix.LMatrix, MMatrix

    public abstract class AbstractMatrix<T>
    extends java.lang.Object
    implements Matrix<T>
    • Constructor Detail

      • AbstractMatrix

        public AbstractMatrix​(T zero,
                              T unity,
                              int rows,
                              int cols)
      • AbstractMatrix

        public AbstractMatrix​(T zero,
                              T unity,
                              org.apache.commons.math.linear.FieldMatrix<jisa.maths.matrices.AbstractMatrix.FieldElement> matrix)
      • AbstractMatrix

        public AbstractMatrix​(T zero,
                              T unity,
                              Matrix<T> matrix)
    • Method Detail

      • getDiagonal

        public Matrix<T> getDiagonal()
        Description copied from interface: Matrix
        Returns the diagonal values of the square matrix as a column matrix.
        Specified by:
        getDiagonal in interface Matrix<T>
        Returns:
        Diagonal values
      • toString

        public java.lang.String toString()
        Description copied from interface: Matrix
        Returns a textual representation of this matrix.
        Specified by:
        toString in interface Matrix<T>
        Overrides:
        toString in class java.lang.Object
        Returns:
        String representation
      • add

        protected abstract T add​(T a,
                                 T b)
      • subtract

        protected abstract T subtract​(T a,
                                      T b)
      • multiply

        protected abstract T multiply​(T a,
                                      T b)
      • divide

        protected abstract T divide​(T a,
                                    T b)
      • copy

        protected abstract T copy​(T a)
      • create

        public AbstractMatrix<T> create​(org.apache.commons.math.linear.FieldMatrix<jisa.maths.matrices.AbstractMatrix.FieldElement> matrix)
      • rows

        public int rows()
        Description copied from interface: Matrix
        Returns the number of rows in the matrix.
        Specified by:
        rows in interface Matrix<T>
        Returns:
        Number of rows
      • cols

        public int cols()
        Description copied from interface: Matrix
        Returns the number of columns in the matrix.
        Specified by:
        cols in interface Matrix<T>
        Returns:
        Number of columns
      • get

        public T get​(int row,
                     int col)
        Description copied from interface: Matrix
        Returns the element at the given indices.
        Specified by:
        get in interface Matrix<T>
        Parameters:
        row - Row index
        col - Column index
        Returns:
        Element at (row,col)
      • getData

        public T[][] getData()
        Description copied from interface: Matrix
        Returns all elements as a 2-dimensional array.
        Specified by:
        getData in interface Matrix<T>
        Returns:
        All elements
      • getFlatData

        public T[] getFlatData()
        Description copied from interface: Matrix
        Returns all elements in a 1-dimensional array.
        Specified by:
        getFlatData in interface Matrix<T>
        Returns:
        All elements
      • set

        public void set​(int row,
                        int col,
                        T value)
        Description copied from interface: Matrix
        Sets the matrix element at the given (row, col) position.
        Specified by:
        set in interface Matrix<T>
        Parameters:
        row - Row index
        col - Column index
        value - Element value to set
      • setAll

        public void setAll​(T... values)
        Description copied from interface: Matrix
        Sets all elements in the matrix.
        Specified by:
        setAll in interface Matrix<T>
        Parameters:
        values - Elements
      • setDiagonal

        public void setDiagonal​(T... values)
        Description copied from interface: Matrix
        Sets the elements on the leading diagonal of the matrix. Matrix must be square.
        Specified by:
        setDiagonal in interface Matrix<T>
        Parameters:
        values - Diagonal elements
      • setDiagonal

        public void setDiagonal​(T value)
        Description copied from interface: Matrix
        Sets the values along the leading diagonal to the same value. Matrix must be square.
        Specified by:
        setDiagonal in interface Matrix<T>
        Parameters:
        value - Element value
      • setAll

        public void setAll​(T value)
        Description copied from interface: Matrix
        Sets all elements to a single value.
        Specified by:
        setAll in interface Matrix<T>
        Parameters:
        value - Value to set
      • mapElement

        public void mapElement​(int row,
                               int col,
                               GFunction<T,​T> mapper)
        Description copied from interface: Matrix
        Replace an element with the value of a function of itself.
        Specified by:
        mapElement in interface Matrix<T>
        Parameters:
        row - Row index
        col - Column index
        mapper - Function for mapping
      • multiplyElement

        public void multiplyElement​(int row,
                                    int col,
                                    T value)
        Description copied from interface: Matrix
        Replace the value of an element with itself multiplied by a given value.
        Specified by:
        multiplyElement in interface Matrix<T>
        Parameters:
        row - Row index
        col - Column index
        value - Factor to multiply by
      • divideElement

        public void divideElement​(int row,
                                  int col,
                                  T value)
        Description copied from interface: Matrix
        Replace the value of an element with itself divided by a given value.
        Specified by:
        divideElement in interface Matrix<T>
        Parameters:
        row - Row index
        col - Column index
        value - Factor to divide by
      • addToElement

        public void addToElement​(int row,
                                 int col,
                                 T value)
        Description copied from interface: Matrix
        Replace the value of an element with itself plus a given value.
        Specified by:
        addToElement in interface Matrix<T>
        Parameters:
        row - Row index
        col - Column index
        value - Value to add
      • subtractFromElement

        public void subtractFromElement​(int row,
                                        int col,
                                        T value)
        Description copied from interface: Matrix
        Replace the value of an element with itself minus a given value.
        Specified by:
        subtractFromElement in interface Matrix<T>
        Parameters:
        row - Row index
        col - Column index
        value - Value to subtract
      • mapRow

        public void mapRow​(int row,
                           Matrix.LinearMapper<T> mapper)
        Description copied from interface: Matrix
        Maps the values of a specified row onto themselves.
        Specified by:
        mapRow in interface Matrix<T>
        Parameters:
        row - Row index to map
        mapper - Function the defines mapping
      • mapCol

        public void mapCol​(int col,
                           Matrix.LinearMapper<T> mapper)
        Description copied from interface: Matrix
        Maps the values of a specified column onto themselves.
        Specified by:
        mapCol in interface Matrix<T>
        Parameters:
        col - Column index to map
        mapper - Function the defines mapping
      • mapRowToRow

        public void mapRowToRow​(int source,
                                int dest,
                                Matrix.LinearMapper<T> mapper)
        Description copied from interface: Matrix
        Maps one row onto another.
        Specified by:
        mapRowToRow in interface Matrix<T>
        Parameters:
        source - Source row index
        dest - Destination row index
        mapper - Function that defines mapping
      • mapColToCol

        public void mapColToCol​(int source,
                                int dest,
                                Matrix.LinearMapper<T> mapper)
        Description copied from interface: Matrix
        Maps one column onto another.
        Specified by:
        mapColToCol in interface Matrix<T>
        Parameters:
        source - Source column index
        dest - Destination column index
        mapper - Function that defines mapping
      • getRowArray

        public T[] getRowArray​(int row)
        Description copied from interface: Matrix
        Returns the values in a single row as an array.
        Specified by:
        getRowArray in interface Matrix<T>
        Parameters:
        row - Row index
        Returns:
        Array of values
      • getColArray

        public T[] getColArray​(int col)
        Description copied from interface: Matrix
        Returns the values in a single column as an array.
        Specified by:
        getColArray in interface Matrix<T>
        Parameters:
        col - Column index
        Returns:
        Array of values
      • getRowMatrix

        public Matrix<T> getRowMatrix​(int row)
        Description copied from interface: Matrix
        Returns a single row as a row matrix.
        Specified by:
        getRowMatrix in interface Matrix<T>
        Parameters:
        row - Row index
        Returns:
        Row matrix
      • getColMatrix

        public Matrix<T> getColMatrix​(int col)
        Description copied from interface: Matrix
        Returns a single column as a column matrix.
        Specified by:
        getColMatrix in interface Matrix<T>
        Parameters:
        col - Column index
        Returns:
        Column matrix
      • multiply

        public Matrix<T> multiply​(Matrix<T> rhs)
        Description copied from interface: Matrix
        Multiplies this matrix by another (this * other).
        Specified by:
        multiply in interface Matrix<T>
        Parameters:
        rhs - Right-hand side of multiplication
        Returns:
        Result of multiplication
      • leftMultiply

        public Matrix<T> leftMultiply​(Matrix<T> lhs)
        Description copied from interface: Matrix
        Multiplies another matrix by this matrix (other * this).
        Specified by:
        leftMultiply in interface Matrix<T>
        Parameters:
        lhs - Matrix to multiply (left-hand side)
        Returns:
        Result of multiplication
      • multiply

        public Matrix<T> multiply​(T rhs)
        Description copied from interface: Matrix
        Multiplies each element in this matrix by a scalar value.
        Specified by:
        multiply in interface Matrix<T>
        Parameters:
        rhs - Scalar value.
        Returns:
        Result of multiplication
      • leftMultiply

        public Matrix<T> leftMultiply​(T lhs)
        Description copied from interface: Matrix
        Pre-multiplies each element in this matrix by a scalar value.
        Specified by:
        leftMultiply in interface Matrix<T>
        Parameters:
        lhs - Scalar value.
        Returns:
        Result of multiplication
      • elementMultiply

        public Matrix<T> elementMultiply​(Matrix<T> rhs)
        Description copied from interface: Matrix
        Computes the element-wise product of this matrix with another (this .* other).
        Specified by:
        elementMultiply in interface Matrix<T>
        Parameters:
        rhs - Matrix to multiply by (right-hand side)
        Returns:
        Result of multiplication
      • leftElementMultiply

        public Matrix<T> leftElementMultiply​(Matrix<T> lhs)
        Description copied from interface: Matrix
        Computes the element-wise product of another matrix with this matrix (other * this).
        Specified by:
        leftElementMultiply in interface Matrix<T>
        Parameters:
        lhs - Matrix to multiply (left-hand side)
        Returns:
        Result of multiplication
      • elementDivide

        public Matrix<T> elementDivide​(Matrix<T> rhs)
        Description copied from interface: Matrix
        Performs element-wise division of this matrix by the specified matrix (divides each element in this matrix by its corresponding element in the other).
        Specified by:
        elementDivide in interface Matrix<T>
        Parameters:
        rhs - Matrix to divide by
        Returns:
        Result of division
      • leftElementDivide

        public Matrix<T> leftElementDivide​(Matrix<T> lhs)
        Description copied from interface: Matrix
        Performs element-wise division of the specified matrix by this matrix (divides each element in the supplied matrix by its corresponding element in this matrix).
        Specified by:
        leftElementDivide in interface Matrix<T>
        Parameters:
        lhs - Matrix to divide
        Returns:
        Result of division
      • divide

        public Matrix<T> divide​(T rhs)
        Description copied from interface: Matrix
        Divides all elements in this matrix by the given value.
        Specified by:
        divide in interface Matrix<T>
        Parameters:
        rhs - Value to divide by
        Returns:
        Result of division
      • leftDivide

        public Matrix<T> leftDivide​(T lhs)
        Description copied from interface: Matrix
        Divides the given value by each element in the matrix returning a matrix of the results.
        Specified by:
        leftDivide in interface Matrix<T>
        Parameters:
        lhs - Value to be divided
        Returns:
        Result of division
      • add

        public Matrix<T> add​(Matrix<T> rhs)
        Description copied from interface: Matrix
        Adds the given matrix to this one. (Adds each element with its corresponding element).
        Specified by:
        add in interface Matrix<T>
        Parameters:
        rhs - Matrix to add
        Returns:
        Result of addition
      • add

        public Matrix<T> add​(T rhs)
        Description copied from interface: Matrix
        Add the given value to each element in this matrix, returning the result.
        Specified by:
        add in interface Matrix<T>
        Parameters:
        rhs - Value to add
        Returns:
        Result of addition
      • subtract

        public Matrix<T> subtract​(Matrix<T> rhs)
        Description copied from interface: Matrix
        Subtracts the given matrix from this one, returning the result.
        Specified by:
        subtract in interface Matrix<T>
        Parameters:
        rhs - Matrix to subtract
        Returns:
        Result of subtraction
      • subtract

        public Matrix<T> subtract​(T rhs)
        Description copied from interface: Matrix
        Subtracts the given value from each element in this matrix, returning the result.
        Specified by:
        subtract in interface Matrix<T>
        Parameters:
        rhs - Value to subtract
        Returns:
        Result of subtraction
      • map

        public Matrix<T> map​(Matrix.EntryMapper<T,​T> mapper)
        Description copied from interface: Matrix
        Map all elements of this matrix into a new matrix according to the provided mapping function.
        Specified by:
        map in interface Matrix<T>
        Parameters:
        mapper - Mapping function
        Returns:
        Mapped matrix
      • map

        public Matrix<T> map​(GFunction<T,​T> mapper)
        Description copied from interface: Matrix
        Map all elements of this matrix into a new matrix according to the provided mapping function.
        Specified by:
        map in interface Matrix<T>
        Parameters:
        mapper - Mapping function
        Returns:
        Mapped matrix
      • mapSelf

        public void mapSelf​(Matrix.EntryMapper<T,​T> mapper)
        Description copied from interface: Matrix
        Map all elements of this matrix onto themselves according to the provided mapping function.
        Specified by:
        mapSelf in interface Matrix<T>
        Parameters:
        mapper - Mapping function
      • copy

        public Matrix<T> copy()
        Description copied from interface: Matrix
        Returns a deep copy of the matrix.
        Specified by:
        copy in interface Matrix<T>
        Returns:
        Copy of matrix
      • getSubMatrix

        public Matrix<T> getSubMatrix​(int[] rows,
                                      int[] cols)
        Description copied from interface: Matrix
        Returns a sub-matrix containing only the specified rows and columns from this matrix.
        Specified by:
        getSubMatrix in interface Matrix<T>
        Parameters:
        rows - Array of row indices
        cols - Array of column indices
        Returns:
        Sub-matrix
      • getSubMatrix

        public Matrix<T> getSubMatrix​(int startRow,
                                      int endRow,
                                      int startCol,
                                      int endCol)
        Description copied from interface: Matrix
        Returns a sub-matrix containing only the rows and columns specified in the given ranges (inclusive).
        Specified by:
        getSubMatrix in interface Matrix<T>
        Parameters:
        startRow - Start of row range
        endRow - End of row range
        startCol - Start of column range
        endCol - End of column range
        Returns:
        Sub-matrix
      • appendRows

        public Matrix<T> appendRows​(Matrix<T> rows)
        Description copied from interface: Matrix
        Creates a new matrix consisting of the given rows appended to the bottom of this matrix.
        Specified by:
        appendRows in interface Matrix<T>
        Parameters:
        rows - Rows to append (must match column dimension)
        Returns:
        Combined matrix
      • appendCols

        public Matrix<T> appendCols​(Matrix<T> cols)
        Description copied from interface: Matrix
        Creates a new matrix consisting of the given columns appended to the right of this matrix.
        Specified by:
        appendCols in interface Matrix<T>
        Parameters:
        cols - Columns to append (must match row dimension)
        Returns:
        Combined matrix
      • isSingular

        public boolean isSingular()
        Description copied from interface: Matrix
        Returns whether the matrix is singular (has no inverse).
        Specified by:
        isSingular in interface Matrix<T>
        Returns:
        Singular?
      • getDeterminant

        public T getDeterminant()
        Description copied from interface: Matrix
        Returns the determinant of the matrix (only for square matrices).
        Specified by:
        getDeterminant in interface Matrix<T>
        Returns:
        Determinant value
      • getTrace

        public T getTrace()
        Description copied from interface: Matrix
        Returns the trace of the matrix (sum of diagonal elements).
        Specified by:
        getTrace in interface Matrix<T>
        Returns:
        Trace value
      • invert

        public Matrix<T> invert()
        Description copied from interface: Matrix
        Inverts the matrix and returns the result (only for square matrices).
        Specified by:
        invert in interface Matrix<T>
        Returns:
        Inverted matrix
      • transpose

        public Matrix<T> transpose()
        Description copied from interface: Matrix
        Transposes the matrix and returns the result.
        Specified by:
        transpose in interface Matrix<T>
        Returns:
        Transposed matrix
      • reshape

        public Matrix<T> reshape​(int rows,
                                 int cols)
        Description copied from interface: Matrix
        Reshapes the elements in the matrix into a matrix of different dimensions (but same total number of elements), returning the result.

        rows * cols must equal this.size().

        Specified by:
        reshape in interface Matrix<T>
        Parameters:
        rows - New number of rows
        cols - New number of columns
        Returns:
        Reshaped matrix
      • leftDivide

        public Matrix<T> leftDivide​(Matrix<T> rhs)
        Description copied from interface: Matrix
        Multiplies the supplied matrix by the inverse of this matrix.
        Specified by:
        leftDivide in interface Matrix<T>
        Parameters:
        rhs - Matrix to be "divided"
        Returns:
        Result of division
      • getQR

        public QR<T> getQR()
        Description copied from interface: Matrix
        Computes and returns the QR decomposition of this matrix.
        Specified by:
        getQR in interface Matrix<T>
        Returns:
        QR Decomposition
      • getLU

        public LU<T> getLU()
        Description copied from interface: Matrix
        Computes and returns the LU decomposition of this matrix (only for square matrices).
        Specified by:
        getLU in interface Matrix<T>
        Returns:
        LU Decomposition
      • getRowSums

        public Matrix<T> getRowSums()
        Description copied from interface: Matrix
        Returns a column matrix of the sums of each row in this matrix.
        Specified by:
        getRowSums in interface Matrix<T>
        Returns:
        Column matrix of sums
      • getColSums

        public Matrix<T> getColSums()
        Description copied from interface: Matrix
        Returns a row matrix of the sums of each column in this matrix.
        Specified by:
        getColSums in interface Matrix<T>
        Returns:
        Row matrix of sums