MatrixVectorMult
org.ejml.alg.dense.mult

## Class MatrixVectorMult

• ```public class MatrixVectorMult
extends Object```

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

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 Summary

Constructors
Constructor and Description
`MatrixVectorMult()`
• ### Method Summary

Methods
Modifier and Type Method and Description
`static void` ```mult(RowD1Matrix64F a, D1Matrix64F b, D1Matrix64F 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.
`static void` ```multAdd(RowD1Matrix64F A, D1Matrix64F B, D1Matrix64F 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.
`static void` ```multAddTransA_reorder(RowD1Matrix64F A, D1Matrix64F B, D1Matrix64F C)```
`static void` ```multAddTransA_small(RowD1Matrix64F A, D1Matrix64F B, D1Matrix64F 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.
`static void` ```multTransA_reorder(RowD1Matrix64F A, D1Matrix64F B, D1Matrix64F C)```
`static void` ```multTransA_small(RowD1Matrix64F A, D1Matrix64F B, D1Matrix64F 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.
• ### Methods inherited from class java.lang.Object

`equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`
• ### Constructor Detail

• #### MatrixVectorMult

`public MatrixVectorMult()`
• ### Method Detail

• #### mult

```public static void mult(RowD1Matrix64F a,
D1Matrix64F b,
D1Matrix64F 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.

```public static void multAdd(RowD1Matrix64F A,
D1Matrix64F B,
D1Matrix64F 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(RowD1Matrix64F A,
D1Matrix64F B,
D1Matrix64F 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(RowD1Matrix64F A,
D1Matrix64F B,
D1Matrix64F C)```
An alternative implementation of `multTransA_small(org.ejml.data.RowD1Matrix64F, org.ejml.data.D1Matrix64F, org.ejml.data.D1Matrix64F)` 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.

```public static void multAddTransA_small(RowD1Matrix64F A,
D1Matrix64F B,
D1Matrix64F 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.
```public static void multAddTransA_reorder(RowD1Matrix64F A,
An alternative implementation of `multAddTransA_small(org.ejml.data.RowD1Matrix64F, org.ejml.data.D1Matrix64F, org.ejml.data.D1Matrix64F)` that performs well on large matrices. There is a relative performance hit when used on small matrices.
`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.