Class DoubleMatrixDataSparse

  • All Implemented Interfaces:
    Serializable, Cloneable

    public class DoubleMatrixDataSparse
    extends DoubleMatrixData
    Stores sparse data for a DoubleMatrix and carries out basic operations. The index in the sparse matrix data is calculated as r * columns + c, where r is the row number, cols is the total number of columns, and c is the column number.

    Copyright (c) 2013-2023 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved.
    BSD-style license. See DJUNITS License.

    Author:
    Alexander Verbraeck, Peter Knoppers
    See Also:
    Serialized Form
    • Constructor Detail

      • DoubleMatrixDataSparse

        public DoubleMatrixDataSparse​(double[] matrixSI,
                                      long[] indices,
                                      int rows,
                                      int cols)
        Create a matrix with sparse data.
        Parameters:
        matrixSI - double[]; the data to store
        indices - long[]; the index values of the Matrix, with <tt>index = row * cols + col</tt>
        rows - int; the number of rows
        cols - int; the number of columns
      • DoubleMatrixDataSparse

        public DoubleMatrixDataSparse​(Collection<DoubleSparseValue<U,​S>> dataSI,
                                      int rows,
                                      int cols)
                               throws NullPointerException
        Create a matrix with sparse data.
        Type Parameters:
        U - the unit
        S - the corresponding scalar type
        Parameters:
        dataSI - Collection<DoubleSparseValue<U, S>>; the sparse [X, Y, SI] values to store
        rows - int; the number of rows of the matrix
        cols - int; the number of columns of the matrix
        Throws:
        NullPointerException - when storageType is null or dataSI is null
    • Method Detail

      • cardinality

        public final int cardinality()
        Compute and return the number of non-zero cells in this indexed value.
        Specified by:
        cardinality in class AbstractStorage<DoubleMatrixData>
        Returns:
        int; the number of non-zero cells
      • assign

        public DoubleMatrixData assign​(DoubleFunction doubleFunction)
        Apply an operation to each cell.
        Specified by:
        assign in class DoubleMatrixData
        Parameters:
        doubleFunction - DoubleFunction; the operation to apply
        Returns:
        DoubleMatrixData; this (modified) double matrix data object
      • assign

        public final DoubleMatrixDataSparse assign​(DoubleFunction2 doubleFunction,
                                                   DoubleMatrixData right)
        Apply a binary operation on a cell by cell basis.
        Specified by:
        assign in class DoubleMatrixData
        Parameters:
        doubleFunction - DoubleFunction2; the binary operation to apply
        right - DoubleMatrixData; the right operand for the binary operation
        Returns:
        DoubleMatrixData; this (modified) double matrix data object
      • toDense

        public final DoubleMatrixDataDense toDense()
        Return the data of this matrix in dense storage format.
        Specified by:
        toDense in class DoubleMatrixData
        Returns:
        DoubleMatrixDataDense; the dense transformation of this data
      • toSparse

        public final DoubleMatrixDataSparse toSparse()
        Return the data of this matrix in sparse storage format.
        Specified by:
        toSparse in class DoubleMatrixData
        Returns:
        DoubleMatrixDataSparse; the sparse transformation of this data
      • getSI

        public final double getSI​(int row,
                                  int col)
        Retrieve one value from this data.
        Specified by:
        getSI in class DoubleMatrixData
        Parameters:
        row - int; the row number to get the value for
        col - int; the column number to get the value for
        Returns:
        the value at the [row, col] point
      • setSI

        public final void setSI​(int row,
                                int col,
                                double valueSI)
        Sets a value at the [row, col] point in the matrix.
        Specified by:
        setSI in class DoubleMatrixData
        Parameters:
        row - int; the row number to set the value for
        col - int; the column number to set the value for
        valueSI - double; the value at the index
      • getDenseMatrixSI

        public final double[][] getDenseMatrixSI()
        Create and return a deep copy of the data in dense format. The double array is of the form d[rows][columns] so each value can be found with d[row][column].
        Specified by:
        getDenseMatrixSI in class DoubleMatrixData
        Returns:
        double[][]; a safe, dense copy of matrixSI as a matrix
      • instantiate

        public static DoubleMatrixDataSparse instantiate​(double[][] valuesSI)
                                                  throws ValueRuntimeException
        Instantiate a DoubleMatrixDataSparse from an array.
        Parameters:
        valuesSI - double[][]; the (SI) values to store
        Returns:
        the DoubleMatrixDataSparse
        Throws:
        ValueRuntimeException - in case matrix is ragged
      • instantiate

        public static DoubleMatrixDataSparse instantiate​(double[][] values,
                                                         Scale scale)
                                                  throws ValueRuntimeException
        Instantiate a DoubleMatrixDataSparse from an array.
        Parameters:
        values - double[][]; the values to store
        scale - Scale; the scale that will convert values to SI
        Returns:
        the DoubleMatrixDataSparse
        Throws:
        ValueRuntimeException - in case matrix is ragged
      • plus

        public DoubleMatrixData plus​(DoubleMatrixData right)
                              throws ValueRuntimeException
        Add two matrices on a cell-by-cell basis. If both matrices are sparse, a sparse matrix is returned, otherwise a dense matrix is returned.
        Specified by:
        plus in class DoubleMatrixData
        Parameters:
        right - DoubleMatrixData; the other data object to add
        Returns:
        the sum of this data object and the other data object
        Throws:
        ValueRuntimeException - if matrices have different lengths
      • minus

        public final DoubleMatrixData minus​(DoubleMatrixData right)
        Subtract two matrices on a cell-by-cell basis. If both matrices are sparse, a sparse matrix is returned, otherwise a dense matrix is returned.
        Specified by:
        minus in class DoubleMatrixData
        Parameters:
        right - DoubleMatrixData; the other data object to subtract
        Returns:
        the sum of this data object and the other data object
      • times

        public DoubleMatrixDataSparse times​(DoubleMatrixData right)
                                     throws ValueRuntimeException
        Multiply two matrices on a cell-by-cell basis. If both matrices are dense, a dense matrix is returned, otherwise a sparse matrix is returned.
        Specified by:
        times in class DoubleMatrixData
        Parameters:
        right - DoubleMatrixData; the other data object to multiply with
        Returns:
        DoubleVectorData; a new double matrix data store holding the result of the multiplications
        Throws:
        ValueRuntimeException - if matrices have different sizes
      • divide

        public DoubleMatrixData divide​(DoubleMatrixData right)
                                throws ValueRuntimeException
        Divide two matrices on a cell-by-cell basis. If this matrix is sparse and right is dense, a sparse matrix is returned, otherwise a dense matrix is returned.
        Specified by:
        divide in class DoubleMatrixData
        Parameters:
        right - DoubleMatrixData; the other data object to divide by
        Returns:
        DoubleMatrixData; the ratios of the values of this data object and the other data object
        Throws:
        ValueRuntimeException - if matrices have different sizes