Class DoubleMatrix

  • All Implemented Interfaces:
    Matrix, Serializable, org.joda.beans.Bean, org.joda.beans.ImmutableBean

    public final class DoubleMatrix
    extends Object
    implements Matrix, Serializable, org.joda.beans.ImmutableBean
    An immutable two-dimensional array of double values.

    This provides functionality similar to List but for a rectangular double[][].

    In mathematical terms, this is a two-dimensional matrix.

    See Also:
    Serialized Form
    • Field Detail

      • EMPTY

        public static final DoubleMatrix EMPTY
        An empty array.
    • Method Detail

      • of

        public static DoubleMatrix of()
        Obtains an empty instance.
        Returns:
        the empty immutable matrix
      • of

        public static DoubleMatrix of​(int rows,
                                      int columns,
                                      double... values)
        Obtains an immutable array with the specified size and values.

        The first two arguments specify the size. The remaining arguments specify the values, all of row 0, then row 1, and so on. There must be be rows * columns values.

        Parameters:
        rows - the number of rows
        columns - the number of columns
        values - the values
        Returns:
        an array containing the specified value
        Throws:
        IllegalArgumentException - if the values array if the incorrect length
      • of

        public static DoubleMatrix of​(int rows,
                                      int columns,
                                      IntIntToDoubleFunction valueFunction)
        Obtains an instance with entries filled using a function.

        The function is passed the row and column index, returning the value.

        Parameters:
        rows - the number of rows
        columns - the number of columns
        valueFunction - the function used to populate the value
        Returns:
        a matrix initialized using the function
      • ofArrays

        public static DoubleMatrix ofArrays​(int rows,
                                            int columns,
                                            IntFunction<double[]> valuesFunction)
        Obtains an instance with entries filled using a function.

        The function is passed the row index, returning the column values.

        Parameters:
        rows - the number of rows
        columns - the number of columns
        valuesFunction - the function used to populate the values
        Returns:
        a matrix initialized using the function
      • ofArrayObjects

        public static DoubleMatrix ofArrayObjects​(int rows,
                                                  int columns,
                                                  IntFunction<DoubleArray> valuesFunction)
        Obtains an instance with entries filled using a function.

        The function is passed the row index, returning the column values.

        Parameters:
        rows - the number of rows
        columns - the number of columns
        valuesFunction - the function used to populate the values
        Returns:
        a matrix initialized using the function
      • ofUnsafe

        public static DoubleMatrix ofUnsafe​(double[][] array)
        Obtains an instance by wrapping a double[][].

        This method is inherently unsafe as it relies on good behavior by callers. Callers must never make any changes to the passed in array after calling this method. Doing so would violate the immutability of this class.

        The double[][] must be rectangular, with the same length for each row. This is not validated.

        Parameters:
        array - the array to assign
        Returns:
        a matrix wrapping the specified array
      • copyOf

        public static DoubleMatrix copyOf​(double[][] array)
        Obtains an instance from a double[][].

        The input array is copied and not mutated.

        Parameters:
        array - the array to copy, cloned
        Returns:
        a matrix containing the specified values
      • filled

        public static DoubleMatrix filled​(int rows,
                                          int columns)
        Obtains an instance with all entries equal to the zero.
        Parameters:
        rows - the number of rows
        columns - the number of columns
        Returns:
        a matrix filled with zeroes
      • filled

        public static DoubleMatrix filled​(int rows,
                                          int columns,
                                          double value)
        Obtains an instance with all entries equal to the same value.
        Parameters:
        rows - the number of rows
        columns - the number of columns
        value - the value of all the elements
        Returns:
        a matrix filled with the specified value
      • identity

        public static DoubleMatrix identity​(int size)
        Obtains an identity matrix.

        An identity matrix is square. It has every value equal to zero, except those on the primary diagonal, which are one.

        Parameters:
        size - the size of the matrix
        Returns:
        an identity matrix of the specified size
      • diagonal

        public static DoubleMatrix diagonal​(DoubleArray array)
        Obtains a diagonal matrix from the specified array.

        A diagonal matrix is square. It only has values on the primary diagonal, and those values are taken from the specified array.

        Parameters:
        array - the array to use to create the matrix
        Returns:
        an identity matrix of the specified size
      • dimensions

        public int dimensions()
        Gets the number of dimensions of this matrix.
        Specified by:
        dimensions in interface Matrix
        Returns:
        two
      • size

        public int size()
        Gets the size of this matrix.

        This is the total number of elements.

        Specified by:
        size in interface Matrix
        Returns:
        the matrix size, zero or greater
      • rowCount

        public int rowCount()
        Gets the number of rows of this matrix.
        Returns:
        the number of rows
      • columnCount

        public int columnCount()
        Gets the number of columns of this matrix.
        Returns:
        the number of columns
      • isSquare

        public boolean isSquare()
        Checks if this matrix is square.

        A square matrix has the same number of rows and columns.

        Returns:
        true if square
      • isEmpty

        public boolean isEmpty()
        Checks if this matrix is empty.
        Returns:
        true if empty
      • get

        public double get​(int row,
                          int column)
        Gets the value at the specified row and column in this matrix.
        Parameters:
        row - the zero-based row index to retrieve
        column - the zero-based column index to retrieve
        Returns:
        the value at the row and column
        Throws:
        IndexOutOfBoundsException - if either index is invalid
      • row

        public DoubleArray row​(int row)
        Gets the row at the specified index.
        Parameters:
        row - the zero-based row index to retrieve
        Returns:
        the row
      • rowArray

        public double[] rowArray​(int row)
        Gets the row at the specified index as an independent array.
        Parameters:
        row - the zero-based row index to retrieve
        Returns:
        the row as a cloned array
      • column

        public DoubleArray column​(int column)
        Gets the column at the specified index.
        Parameters:
        column - the zero-based column index to retrieve
        Returns:
        the column
      • columnArray

        public double[] columnArray​(int column)
        Gets the column at the specified index as an independent array.
        Parameters:
        column - the zero-based column index to retrieve
        Returns:
        the column as a cloned array
      • toArray

        public double[][] toArray()
        Converts this instance to an independent double[][].
        Returns:
        an array of arrays containing a copy of matrix elements
      • toArrayUnsafe

        public double[][] toArrayUnsafe()
        Returns the underlying array.

        This method is inherently unsafe as it relies on good behavior by callers. Callers must never make any changes to the array returned by this method. Doing so would violate the immutability of this class.

        Returns:
        the raw array
      • forEach

        public void forEach​(IntIntDoubleConsumer action)
        Applies an action to each value in the matrix.

        This is used to perform an action on the contents of this matrix. The action receives the row, the column and the value. For example, the action could print out the matrix.

           base.forEach((row, col, value) -> System.out.println(row + ": " + col + ": " + value));
         

        This instance is immutable and unaffected by this method.

        Parameters:
        action - the action to be applied
      • with

        public DoubleMatrix with​(int row,
                                 int column,
                                 double newValue)
        Returns an instance with the value at the specified index changed.

        This instance is immutable and unaffected by this method.

        Parameters:
        row - the zero-based row index to retrieve
        column - the zero-based column index to retrieve
        newValue - the new value to store
        Returns:
        a copy of this matrix with the value at the index changed
        Throws:
        IndexOutOfBoundsException - if either index is invalid
      • multipliedBy

        public DoubleMatrix multipliedBy​(double factor)
        Returns an instance with each value multiplied by the specified factor.

        This is used to multiply the contents of this matrix, returning a new matrix.

        This is a special case of map(DoubleUnaryOperator). This instance is immutable and unaffected by this method.

        Parameters:
        factor - the multiplicative factor
        Returns:
        a copy of this matrix with the each value multiplied by the factor
      • map

        public DoubleMatrix map​(DoubleUnaryOperator operator)
        Returns an instance with an operation applied to each value in the matrix.

        This is used to perform an operation on the contents of this matrix, returning a new matrix. The operator only receives the value. For example, the operator could take the inverse of each element.

           result = base.map(value -> 1 / value);
         

        This instance is immutable and unaffected by this method.

        Parameters:
        operator - the operator to be applied
        Returns:
        a copy of this matrix with the operator applied to the original values
      • mapWithIndex

        public DoubleMatrix mapWithIndex​(IntIntDoubleToDoubleFunction function)
        Returns an instance with an operation applied to each indexed value in the matrix.

        This is used to perform an operation on the contents of this matrix, returning a new matrix. The function receives the row index, column index and the value. For example, the operator could multiply the value by the index.

           result = base.mapWithIndex((index, value) -> index * value);
         

        This instance is immutable and unaffected by this method.

        Parameters:
        function - the function to be applied
        Returns:
        a copy of this matrix with the operator applied to the original values
      • plus

        public DoubleMatrix plus​(DoubleMatrix other)
        Returns an instance where each element is the sum of the matching values in this array and the other matrix.

        This is used to add two matrices, returning a new matrix. Element (i,j) in the resulting matrix is equal to element (i,j) in this matrix plus element (i,j) in the other matrix. The matrices must be of the same size.

        This is a special case of combine(DoubleMatrix, DoubleBinaryOperator). This instance is immutable and unaffected by this method.

        Parameters:
        other - the other matrix
        Returns:
        a copy of this matrix with matching elements added
        Throws:
        IllegalArgumentException - if the matrices have different sizes
      • minus

        public DoubleMatrix minus​(DoubleMatrix other)
        Returns an instance where each element is equal to the difference between the matching values in this matrix and the other matrix.

        This is used to subtract the second matrix from the first, returning a new matrix. Element (i,j) in the resulting matrix is equal to element (i,j) in this matrix minus element (i,j) in the other matrix. The matrices must be of the same size.

        This is a special case of combine(DoubleMatrix, DoubleBinaryOperator). This instance is immutable and unaffected by this method.

        Parameters:
        other - the other matrix
        Returns:
        a copy of this matrix with matching elements subtracted
        Throws:
        IllegalArgumentException - if the matrices have different sizes
      • combine

        public DoubleMatrix combine​(DoubleMatrix other,
                                    DoubleBinaryOperator operator)
        Returns an instance where each element is formed by some combination of the matching values in this matrix and the other matrix.

        This is used to combine two matrices, returning a new matrix. Element (i,j) in the resulting matrix is equal to the result of the operator when applied to element (i,j) in this array and element (i,j) in the other array. The arrays must be of the same size.

        This instance is immutable and unaffected by this method.

        Parameters:
        other - the other matrix
        operator - the operator used to combine each pair of values
        Returns:
        a copy of this matrix combined with the specified matrix
        Throws:
        IllegalArgumentException - if the matrices have different sizes
      • total

        public double total()
        Returns the total of all the values in the matrix.

        This is a special case of reduce(double, DoubleBinaryOperator).

        Returns:
        the total of all the values
      • reduce

        public double reduce​(double identity,
                             DoubleBinaryOperator operator)
        Reduces this matrix returning a single value.

        This is used to reduce the values in this matrix to a single value. The operator is called once for each element in the matrix. The first argument to the operator is the running total of the reduction, starting from zero. The second argument to the operator is the element.

        This instance is immutable and unaffected by this method.

        Parameters:
        identity - the identity value to start from
        operator - the operator used to combine the value with the current total
        Returns:
        the result of the reduction
      • transpose

        public DoubleMatrix transpose()
        Transposes the matrix.

        This converts a matrix of m x n into a matrix of n x m. Each element is moved to the opposite position.

        Returns:
        the transposed matrix
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class Object
      • meta

        public static DoubleMatrix.Meta meta()
        The meta-bean for DoubleMatrix.
        Returns:
        the meta-bean, not null
      • metaBean

        public DoubleMatrix.Meta metaBean()
        Specified by:
        metaBean in interface org.joda.beans.Bean