Class MatrixVectorMult_DDRM

java.lang.Object
org.ejml.dense.row.mult.MatrixVectorMult_DDRM

public class MatrixVectorMult_DDRM extends Object

This class contains various types of matrix vector multiplcation operations for DMatrixRMaj.

If a matrix has only one column or row then it is a vector. There are faster algorithms that can be used to multiply matrices by vectors. Strangely, even though the operations count smaller, the difference between this and a regular matrix multiply is insignificant for large matrices. The smaller matrices there is about a 40% speed improvement. In practice the speed improvement for smaller matrices is not noticeable unless 10s of millions of matrix multiplications are being performed.

  • Constructor Details

    • MatrixVectorMult_DDRM

      public MatrixVectorMult_DDRM()
  • Method Details

    • mult

      public static void mult(DMatrix1Row A, DMatrixD1 B, DMatrixD1 C)

      Performs a matrix vector multiply.

      c = A * b
      and
      c = A * bT

      ci = Sum{ j=1:n, aij * bj}

      where A is a matrix, b is a column or transposed row vector, and c is a column vector.

      Parameters:
      A - A matrix that is m by n. Not modified.
      B - A vector that has length n. Not modified.
      C - A column vector that has length m. Modified.
    • multAdd

      public static void multAdd(DMatrix1Row A, DMatrixD1 B, DMatrixD1 C)

      Performs a matrix vector multiply.

      C = C + A * B
      or
      C = C + A * BT

      ci = Sum{ j=1:n, ci + aij * bj}

      where A is a matrix, B is a column or transposed row vector, and C is a column vector.

      Parameters:
      A - A matrix that is m by n. Not modified.
      B - A vector that has length n. Not modified.
      C - A column vector that has length m. Modified.
    • multTransA_small

      public static void multTransA_small(DMatrix1Row A, DMatrixD1 B, DMatrixD1 C)

      Performs a matrix vector multiply.

      C = AT * B
      where B is a column vector.
      or
      C = AT * BT
      where B is a row vector.

      ci = Sum{ j=1:n, aji * bj}

      where A is a matrix, B is a column or transposed row vector, and C is a column vector.

      This implementation is optimal for small matrices. There is a huge performance hit when used on large matrices due to CPU cache issues.

      Parameters:
      A - A matrix that is m by n. Not modified.
      B - A that has length m and is a column. Not modified.
      C - A column vector that has length n. Modified.
    • multTransA_reorder

      public static void multTransA_reorder(DMatrix1Row A, DMatrixD1 B, DMatrixD1 C)
      An alternative implementation of multTransA_small(org.ejml.data.DMatrix1Row, org.ejml.data.DMatrixD1, org.ejml.data.DMatrixD1) that performs well on large matrices. There is a relative performance hit when used on small matrices.
      Parameters:
      A - A matrix that is m by n. Not modified.
      B - A Vector that has length m. Not modified.
      C - A column vector that has length n. Modified.
    • multAddTransA_small

      public static void multAddTransA_small(DMatrix1Row A, DMatrixD1 B, DMatrixD1 C)

      Performs a matrix vector multiply.

      C = C + AT * B
      or
      C = CT + AT * BT

      ci = Sum{ j=1:n, ci + aji * bj}

      where A is a matrix, B is a column or transposed row vector, and C is a column vector.

      This implementation is optimal for small matrices. There is a huge performance hit when used on large matrices due to CPU cache issues.

      Parameters:
      A - A matrix that is m by n. Not modified.
      B - A vector that has length m. Not modified.
      C - A column vector that has length n. Modified.
    • multAddTransA_reorder

      public static void multAddTransA_reorder(DMatrix1Row A, DMatrixD1 B, DMatrixD1 C)
      An alternative implementation of multAddTransA_small(org.ejml.data.DMatrix1Row, org.ejml.data.DMatrixD1, org.ejml.data.DMatrixD1) that performs well on large matrices. There is a relative performance hit when used on small matrices.
      Parameters:
      A - A matrix that is m by n. Not modified.
      B - A vector that has length m. Not modified.
      C - A column vector that has length n. Modified.
    • innerProduct

      public static double innerProduct(double[] a, int offsetA, DMatrix1Row B, double[] c, int offsetC)
      scalar = AT*B*C
      Parameters:
      a - (Input) vector
      offsetA - Input) first index in vector a
      B - (Input) Matrix
      c - (Output) vector
      offsetC - (Output) first index in vector c