-
Notifications
You must be signed in to change notification settings - Fork 113
Vectors vs. matrices
Mike Anderson edited this page Jul 22, 2013
·
10 revisions
core.matrix supports both vectors (1D arrays) and matrices (2D arrays). This page explains the differences between the two.
- Can be thought of as a 2D nested array, e.g.
\[\[1 2 3\] \[4 5 6\] \[7 8 9\]\]
- Always have
dimensionality
2; equivalent to a 2D array - Are indexed by
[row column]
- Can be transposed, which reverses rows and columns
- Support some matrix-only operations, e.g.
det
,trace
- A
slice
of a Matrix is a 1D vector
- Can be though of as a 1D array, e.g.
[1 2 3]
- Always have
dimensionality
1; equivalent to a 1D array - Are indexed by
[position]
- Transposing a vector is the identity function: if you call
transpose
on a vector, you will get the same vector back unchanged - Supports some vector-only operations, e.g.
distance
,dot-product
- A
slice
of a vector is a 0D scalar
Technically, you can always emulate vectors by using matrices. Use either a Nx1 column matrix or a 1xN row matrix. Indeed, some mathematics systems (like MATLAB) expect you to do just this.
However, there are some important reasons that we need to have both:
-
core.matrix
is designed to be a general purpose N-Dimensional API, so it needs to support both the 1D and 2D cases in general. - Many underlying matrix implementations have both vectors and matrices. We need to support them.
- It can catch some runtime type errors (e.g. passing a matrix where a vector is required).
- In some cases, using vectors rather than matrices offers higher performance (due to a simpler data structure and less complex indexing).
Usually this will be clear from what is needed for your problem. If you need a 2D array of numbers then use a matrix. If you need a 1D array of numbers then use a vector.