Package org.ejml.data

Class DMatrixSparseTriplet

  • All Implemented Interfaces:
    java.io.Serializable, DMatrix, DMatrixSparse, Matrix, MatrixSparse, ReshapeMatrix

    public class DMatrixSparseTriplet
    extends java.lang.Object
    implements DMatrixSparse
    A sparse matrix format that is designed to act as an intermediate step for other matrix types. Constructing DMatrixSparseCSC from scratch is difficult, but if a triplet is first defined then it is much easier. Inside this class elements are stored in an unsorted list. Adding an element to the list with addItem(int, int, double) is an O(1) operation but reading a specific element is O(N) operation, making it impractical for operations like matrix multiplications.
    See Also:
    Serialized Form
    • Field Summary

      Fields 
      Modifier and Type Field Description
      int numCols
      Number of columns in the matrix
      int numRows
      Number of rows in the matrix
      int nz_length
      Number of non-zero elements in this matrix
      IGrowArray nz_rowcol
      Storage for row and column coordinate for non-zero elements
      DGrowArray nz_value
      Storage for value of a non-zero element
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void addItem​(int row, int col, double value)
      Adds a triplet of (row,vol,value) to the end of the list.
      void addItemCheck​(int row, int col, double value)
      Adds a triplet of (row,vol,value) to the end of the list and performs a bounds check to make sure it is a legal value.
      <T extends Matrix>
      T
      copy()
      Creates an exact copy of the matrix
      <T extends Matrix>
      T
      create​(int numRows, int numCols)
      Creates a new matrix of the same type with the specified shape
      java.util.Iterator<DMatrixSparse.CoordinateRealValue> createCoordinateIterator()
      Creates an iterator which will go through each non-zero value in the sparse matrix.
      <T extends Matrix>
      T
      createLike()
      Creates a new matrix with the same shape as this matrix
      double get​(int row, int col)
      Searches the list to see if the element at (row,col) has been assigned.
      int getLength()  
      int getNonZeroLength()
      Returns the number of non-zero elements.
      int getNumCols()
      Returns the number of columns in this matrix.
      int getNumElements()
      Returns the number of elements in this matrix, which is the number of rows times the number of columns.
      int getNumRows()
      Returns the number of rows in this matrix.
      MatrixType getType()
      Returns the type of matrix
      boolean isAssigned​(int row, int col)
      Is the specified element explicitly assigned a value
      int nz_index​(int row, int col)  
      void print()
      Prints the matrix to standard out using standard formatting.
      void print​(java.lang.String format)
      Prints the matrix to standard out with the specified formatting.
      void printNonZero()
      Prints to standard out the non-zero elements only.
      void remove​(int row, int col)
      If the specified element is non-zero it is removed from the structure
      void reset()  
      void reshape​(int numRows, int numCols)
      Changes the number of rows and columns in the matrix.
      void reshape​(int numRows, int numCols, int arrayLength)
      Reshapes the matrix so that it can store a matrix with the specified dimensions and the number of non-zero elements.
      void set​(int row, int col, double value)
      Sets the element's value at (row,col).
      void set​(Matrix original)
      Sets this matrix to be identical to the 'original' matrix passed in.
      void shrinkArrays()
      Reduces the size of internal data structures to their minimal size.
      double unsafe_get​(int row, int col)
      Same as DMatrix.get(int, int) but does not perform bounds check on input parameters.
      void unsafe_set​(int row, int col, double value)
      Same as set(int, int, double) but does not check to see if row and column are within bounds.
      void zero()
      Sets all values inside the matrix to zero
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • nz_rowcol

        public IGrowArray nz_rowcol
        Storage for row and column coordinate for non-zero elements
      • nz_value

        public DGrowArray nz_value
        Storage for value of a non-zero element
      • nz_length

        public int nz_length
        Number of non-zero elements in this matrix
      • numRows

        public int numRows
        Number of rows in the matrix
      • numCols

        public int numCols
        Number of columns in the matrix
    • Constructor Detail

      • DMatrixSparseTriplet

        public DMatrixSparseTriplet()
      • DMatrixSparseTriplet

        public DMatrixSparseTriplet​(int numRows,
                                    int numCols,
                                    int initLength)
        Parameters:
        numRows - Number of rows in the matrix
        numCols - Number of columns in the matrix
        initLength - Initial maximum length of data array.
    • Method Detail

      • reset

        public void reset()
      • reshape

        public void reshape​(int numRows,
                            int numCols)
        Description copied from interface: MatrixSparse
        Changes the number of rows and columns in the matrix. The graph structure is flushed and the matrix will be empty/all zeros. Similar to MatrixSparse.reshape(int, int, int), but the storage for non-zero elements is not changed
        Specified by:
        reshape in interface MatrixSparse
        Specified by:
        reshape in interface ReshapeMatrix
        Parameters:
        numRows - number of rows
        numCols - number of columns
      • reshape

        public void reshape​(int numRows,
                            int numCols,
                            int arrayLength)
        Description copied from interface: MatrixSparse
        Reshapes the matrix so that it can store a matrix with the specified dimensions and the number of non-zero elements. The reshaped matrix will be empty.
        Specified by:
        reshape in interface MatrixSparse
        Parameters:
        numRows - number of rows
        numCols - number of columns
        arrayLength - Array length for storing non-zero elements.
      • addItem

        public void addItem​(int row,
                            int col,
                            double value)

        Adds a triplet of (row,vol,value) to the end of the list. This is the preferred way to add elements into this array type as it has a runtime complexity of O(1).

        One potential problem with using this function instead of set(int, int, double) is that it does not check to see if a (row,col) has already been assigned a value. If a (row,col) is defined multiple times how this is handled is not defined.
        Parameters:
        row - Row the element belongs in
        col - Column the element belongs in
        value - The value of the element
      • addItemCheck

        public void addItemCheck​(int row,
                                 int col,
                                 double value)
        Adds a triplet of (row,vol,value) to the end of the list and performs a bounds check to make sure it is a legal value.
        Parameters:
        row - Row the element belongs in
        col - Column the element belongs in
        value - The value of the element
      • set

        public void set​(int row,
                        int col,
                        double value)
        Sets the element's value at (row,col). It first checks to see if the element already has a value and if it does that value is changed. As a result this operation is O(N), where N is the number of elements in the matrix.
        Specified by:
        set in interface DMatrix
        Parameters:
        row - Matrix element's row index.
        col - Matrix element's column index.
        value - value of element.
        See Also:
        For a faster but less "safe" alternative
      • unsafe_set

        public void unsafe_set​(int row,
                               int col,
                               double value)
        Same as set(int, int, double) but does not check to see if row and column are within bounds.
        Specified by:
        unsafe_set in interface DMatrix
        Parameters:
        row - Matrix element's row index.
        col - Matrix element's column index.
        value - value of element.
      • getNumElements

        public int getNumElements()
        Description copied from interface: DMatrix
        Returns the number of elements in this matrix, which is the number of rows times the number of columns.
        Specified by:
        getNumElements in interface DMatrix
        Returns:
        Number of elements in this matrix.
      • get

        public double get​(int row,
                          int col)
        Searches the list to see if the element at (row,col) has been assigned. The worst case runtime for this operation is O(N), where N is the number of elements in the matrix.
        Specified by:
        get in interface DMatrix
        Parameters:
        row - Matrix element's row index.
        col - Matrix element's column index.
        Returns:
        Value at (row,col)
      • unsafe_get

        public double unsafe_get​(int row,
                                 int col)
        Description copied from interface: DMatrix
        Same as DMatrix.get(int, int) but does not perform bounds check on input parameters. This results in about a 25% speed increase but potentially sacrifices stability and makes it more difficult to track down simple errors. It is not recommended that this function be used, except in highly optimized code where the bounds are implicitly being checked.
        Specified by:
        unsafe_get in interface DMatrix
        Parameters:
        row - Matrix element's row index..
        col - Matrix element's column index.
        Returns:
        The specified element's value.
      • nz_index

        public int nz_index​(int row,
                            int col)
      • getLength

        public int getLength()
      • getNumRows

        public int getNumRows()
        Description copied from interface: Matrix
        Returns the number of rows in this matrix.
        Specified by:
        getNumRows in interface Matrix
        Returns:
        Number of rows.
      • getNumCols

        public int getNumCols()
        Description copied from interface: Matrix
        Returns the number of columns in this matrix.
        Specified by:
        getNumCols in interface Matrix
        Returns:
        Number of columns.
      • copy

        public <T extends Matrix> T copy()
        Description copied from interface: Matrix
        Creates an exact copy of the matrix
        Specified by:
        copy in interface Matrix
      • createLike

        public <T extends Matrix> T createLike()
        Description copied from interface: Matrix
        Creates a new matrix with the same shape as this matrix
        Specified by:
        createLike in interface Matrix
      • create

        public <T extends Matrix> T create​(int numRows,
                                           int numCols)
        Description copied from interface: Matrix
        Creates a new matrix of the same type with the specified shape
        Specified by:
        create in interface Matrix
      • set

        public void set​(Matrix original)
        Description copied from interface: Matrix
        Sets this matrix to be identical to the 'original' matrix passed in.
        Specified by:
        set in interface Matrix
      • shrinkArrays

        public void shrinkArrays()
        Description copied from interface: MatrixSparse
        Reduces the size of internal data structures to their minimal size. No information is lost but the arrays will change
        Specified by:
        shrinkArrays in interface MatrixSparse
      • remove

        public void remove​(int row,
                           int col)
        Description copied from interface: MatrixSparse
        If the specified element is non-zero it is removed from the structure
        Specified by:
        remove in interface MatrixSparse
        Parameters:
        row - the row
        col - the column
      • isAssigned

        public boolean isAssigned​(int row,
                                  int col)
        Description copied from interface: MatrixSparse
        Is the specified element explicitly assigned a value
        Specified by:
        isAssigned in interface MatrixSparse
        Parameters:
        row - the row
        col - the column
        Returns:
        true if it has been assigned a value or false if not
      • zero

        public void zero()
        Description copied from interface: Matrix
        Sets all values inside the matrix to zero
        Specified by:
        zero in interface Matrix
        Specified by:
        zero in interface MatrixSparse
      • print

        public void print()
        Description copied from interface: Matrix
        Prints the matrix to standard out using standard formatting. This is the same as calling print("%e")
        Specified by:
        print in interface Matrix
      • print

        public void print​(java.lang.String format)
        Description copied from interface: Matrix
        Prints the matrix to standard out with the specified formatting.
        Specified by:
        print in interface Matrix
        Parameters:
        format - printf style formatting for a float. E.g. "%f"
        See Also:
        Formatter
      • printNonZero

        public void printNonZero()
        Description copied from interface: MatrixSparse
        Prints to standard out the non-zero elements only.
        Specified by:
        printNonZero in interface MatrixSparse
      • getType

        public MatrixType getType()
        Description copied from interface: Matrix
        Returns the type of matrix
        Specified by:
        getType in interface Matrix