Class SparseFieldMatrix<T extends FieldElement<T>>

java.lang.Object
org.apache.commons.math3.linear.AbstractFieldMatrix<T>
org.apache.commons.math3.linear.SparseFieldMatrix<T>
Type Parameters:
T - the type of the field elements
All Implemented Interfaces:
AnyMatrix, FieldMatrix<T>

public class SparseFieldMatrix<T extends FieldElement<T>> extends AbstractFieldMatrix<T>
Sparse matrix implementation based on an open addressed map.

Caveat: This implementation assumes that, for any x, the equality x * 0d == 0d holds. But it is is not true for NaN. Moreover, zero entries will lose their sign. Some operations (that involve NaN and/or infinities) may thus give incorrect results.

Since:
2.0
  • Field Details

    • entries

      private final OpenIntToFieldHashMap<T extends FieldElement<T>> entries
      Storage for (sparse) matrix elements.
    • rows

      private final int rows
      Row dimension.
    • columns

      private final int columns
      Column dimension.
  • Constructor Details

    • SparseFieldMatrix

      public SparseFieldMatrix(Field<T> field)
      Create a matrix with no data.
      Parameters:
      field - Field to which the elements belong.
    • SparseFieldMatrix

      public SparseFieldMatrix(Field<T> field, int rowDimension, int columnDimension)
      Create a new SparseFieldMatrix with the supplied row and column dimensions.
      Parameters:
      field - Field to which the elements belong.
      rowDimension - Number of rows in the new matrix.
      columnDimension - Number of columns in the new matrix.
      Throws:
      NotStrictlyPositiveException - if row or column dimension is not positive.
    • SparseFieldMatrix

      public SparseFieldMatrix(SparseFieldMatrix<T> other)
      Copy constructor.
      Parameters:
      other - Instance to copy.
    • SparseFieldMatrix

      public SparseFieldMatrix(FieldMatrix<T> other)
      Generic copy constructor.
      Parameters:
      other - Instance to copy.
  • Method Details

    • addToEntry

      public void addToEntry(int row, int column, T increment)
      Change an entry in the specified row and column.
      Specified by:
      addToEntry in interface FieldMatrix<T extends FieldElement<T>>
      Specified by:
      addToEntry in class AbstractFieldMatrix<T extends FieldElement<T>>
      Parameters:
      row - Row location of entry to be set.
      column - Column location of entry to be set.
      increment - Value to add to the current matrix entry in (row, column).
    • copy

      public FieldMatrix<T> copy()
      Make a (deep) copy of this.
      Specified by:
      copy in interface FieldMatrix<T extends FieldElement<T>>
      Specified by:
      copy in class AbstractFieldMatrix<T extends FieldElement<T>>
      Returns:
      a copy of this matrix.
    • createMatrix

      public FieldMatrix<T> createMatrix(int rowDimension, int columnDimension)
      Create a new FieldMatrix of the same type as the instance with the supplied row and column dimensions.
      Specified by:
      createMatrix in interface FieldMatrix<T extends FieldElement<T>>
      Specified by:
      createMatrix in class AbstractFieldMatrix<T extends FieldElement<T>>
      Parameters:
      rowDimension - the number of rows in the new matrix
      columnDimension - the number of columns in the new matrix
      Returns:
      a new matrix of the same type as the instance
    • getColumnDimension

      public int getColumnDimension()
      Returns the number of columns in the matrix.
      Specified by:
      getColumnDimension in interface AnyMatrix
      Specified by:
      getColumnDimension in class AbstractFieldMatrix<T extends FieldElement<T>>
      Returns:
      columnDimension
    • getEntry

      public T getEntry(int row, int column)
      Returns the entry in the specified row and column.
      Specified by:
      getEntry in interface FieldMatrix<T extends FieldElement<T>>
      Specified by:
      getEntry in class AbstractFieldMatrix<T extends FieldElement<T>>
      Parameters:
      row - row location of entry to be fetched
      column - column location of entry to be fetched
      Returns:
      matrix entry in row,column
    • getRowDimension

      public int getRowDimension()
      Returns the number of rows in the matrix.
      Specified by:
      getRowDimension in interface AnyMatrix
      Specified by:
      getRowDimension in class AbstractFieldMatrix<T extends FieldElement<T>>
      Returns:
      rowDimension
    • multiplyEntry

      public void multiplyEntry(int row, int column, T factor)
      Change an entry in the specified row and column.
      Specified by:
      multiplyEntry in interface FieldMatrix<T extends FieldElement<T>>
      Specified by:
      multiplyEntry in class AbstractFieldMatrix<T extends FieldElement<T>>
      Parameters:
      row - Row location of entry to be set.
      column - Column location of entry to be set.
      factor - Multiplication factor for the current matrix entry in (row,column)
    • setEntry

      public void setEntry(int row, int column, T value)
      Set the entry in the specified row and column.
      Specified by:
      setEntry in interface FieldMatrix<T extends FieldElement<T>>
      Specified by:
      setEntry in class AbstractFieldMatrix<T extends FieldElement<T>>
      Parameters:
      row - row location of entry to be set
      column - column location of entry to be set
      value - matrix entry to be set in row,column
    • computeKey

      private int computeKey(int row, int column)
      Compute the key to access a matrix element.
      Parameters:
      row - Row index of the matrix element.
      column - Column index of the matrix element.
      Returns:
      the key within the map to access the matrix element.