8 Matrices and arrays
When we have finished this chapter, we should be able to:
8.1 Packages we need
We need to load the following packages:
8.2 Definition of a matrix
In mathematics, a matrix X is a rectangular array of numbers, symbols, or expressions arranged in rows and columns. A matrix is defined by its dimensions, which specify the number of rows and columns it contains. For example:
\[ X_{3\times 4} = \begin{bmatrix} x_{11} & x_{12} & x_{13} & x_{14}\\ x_{21} & x_{22} & x_{23} & x_{24}\\ x_{31} & x_{32} & x_{33} & x_{34} \end{bmatrix} \]
In this case, the matrix is a \(3 \times 4\) matrix because it has 3 rows and 4 columns. The element in the first row and second column is \(x_{12}\), and the element in the second row and third column is \(x_{23}\).
Then \(3 \times 1\) matrices \(\begin{bmatrix} x_{11} \\ x_{21} \\ x_{31} \end{bmatrix}, \begin{bmatrix} x_{12} \\ x_{22} \\ x_{32} \end{bmatrix}, \begin{bmatrix} x_{13} \\ x_{23} \\ x_{33} \end{bmatrix}, \begin{bmatrix} x_{14} \\ x_{24} \\ x_{34} \end{bmatrix}\) are called column vectors of the matrix.
Also \(1 \times 4\) matrices such that \(\begin{bmatrix} x_{11} & x_{12} & x_{13} & x_{14} \end{bmatrix}, \begin{bmatrix} x_{21} & x_{22} & x_{23} & x_{24} \end{bmatrix}, \begin{bmatrix} x_{31} & x_{32} & x_{33} & x_{34} \end{bmatrix}\) are called row vectors of the matrix.
Example
\[ X_{3\times 4} = \begin{bmatrix} 4 & 0 & 2 & 1\\ 3 & 1 & 4 & 2\\ 2 & 0 & 1 & 3 \end{bmatrix} \]
The column vectors are: \(\begin{bmatrix} 4 \\ 3 \\ 2 \end{bmatrix}, \begin{bmatrix} 0 \\ 1 \\ 0 \end{bmatrix}, \begin{bmatrix} 2 \\ 4 \\ 1 \end{bmatrix}, \begin{bmatrix} 1 \\ 2 \\ 3 \end{bmatrix}\)
The row vectors are: \(\begin{bmatrix} 4 & 0 & 2 & 1 \end{bmatrix}, \begin{bmatrix} 3 & 1 & 4 & 2 \end{bmatrix}, \begin{bmatrix} 2 & 0 & 1 & 3 \end{bmatrix}\)
The main diagonal consisted of the numbers 4, 1, and 1.
8.3 Creating a matrix in R
In R, every data object contains various attributes to describe the characteristics of the data it holds. For example, objects like matrices can be produced using the dim
(dimension) attribute, facilitating the performance of matrix algebra operations.
In R, adding a dimension attribute to a vector allows to reshape it into a 2-dimensional matrix. For example:
[,1] [,2] [,3] [,4]
[1,] 4 0 2 1
[2,] 3 1 4 2
[3,] 2 0 1 3
The dim()
is an inbuilt R function that either sets or returns the dimension of the matrix, array, or data frame. Here, the dim()
function sets the dimension for the X1
object.
Most often we create a matrix using the matrix()
function. In this case, we need to specify the number of rows and columns in the function.
Example 1: numeric matrix
X2 <- matrix(X1, nrow = 3, ncol = 4)
X2
[,1] [,2] [,3] [,4]
[1,] 4 0 2 1
[2,] 3 1 4 2
[3,] 2 0 1 3
The matrix is filled by columns (default column-wise), so entries can be thought of starting in the “upper left” corner and running down the columns. If we want the matrix to be filled by rows we must add the extra argument byrow = TRUE
in the matrix()
function, as follows:
X3 <- matrix(X1, nrow = 3, ncol = 4, byrow = TRUE)
X3
[,1] [,2] [,3] [,4]
[1,] 4 3 2 0
[2,] 1 0 2 4
[3,] 1 1 2 3
The type
of data, the class
and the dimension
of the X3
object are:
Of note, the typeof()
function gives the type of data that the object includes (double), while the class
is the type of structure (matrix) of the object.
In this example, the dim()
function takes the R object, X3, as an argument and returns its dimension.
Example 2: logical matrix
x_logical <- c(TRUE, FALSE, FALSE, TRUE, FALSE, FALSE)
X4 <- matrix(x_logical, nrow = 2, ncol = 3)
X4
[,1] [,2] [,3]
[1,] TRUE FALSE FALSE
[2,] FALSE TRUE FALSE
The type
of data, the class
and the dimension
of the X4
object are:
Example 3: character matrix
[,1] [,2] [,3]
[1,] "a" "c" "e"
[2,] "b" "d" "f"
The type
of data, the class
and the dimension
of the X5
object are:
8.4 Using matrix subscripts
In R, we can identify rows, columns, or elements of a matrix by using subscripts and brackets. Particularly, X[i, ] refers to the ith row of matrix X, X[ , j] refers to jth column, and X[i, j] refers to the ijth element, respectively.
The subscripts i and j can be numeric vectors in order to select multiple rows or columns, as shown in the following examples.
X <- matrix(1:10, nrow=2) # create a 2x5 numeric matrix filled by column
X
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
X[2, ] # select the 2nd row
[1] 2 4 6 8 10
X[, 2] # select the 2nd column
[1] 3 4
X[1, 4] # select the element in the 1st row, 4th column
[1] 7
X[1, c(4, 5)] # select the elements in the 1st row, 4th and 5th column
[1] 7 9
8.5 Special types of matrices
8.5.1 The square matrix
A square matrix is a matrix that has an equal number of rows and columns.
Example
\[ M_{3\times 3} = \begin{bmatrix} 5 & 1 & 0\\ 3 & -1 & 2\\ 4 & 0 & -1 \end{bmatrix} \]
In R,
[,1] [,2] [,3]
[1,] 5 1 0
[2,] 3 -1 2
[3,] 4 0 -1
The main diagonal consisted of the numbers 5, -1, and -1. In R:
diag(M)
[1] 5 -1 -1
8.5.2 The diagonal matrix
A diagonal matrix is a special type of square matrix where all the elements outside the main diagonal are zero.
Example
\[ D_{3\times 3} = \begin{bmatrix} 4 & 0 & 0\\ 0 & -1 & 0\\ 0 & 0 & -5 \end{bmatrix} \]
In R, we can create a diagonal matrix of size 3 by using the diag()
function:
8.5.3 The identity matrix
An identity matrix, often denoted as “I”, is a square matrix (i.e. the number of rows is equal to the number of columns) with ones on the main diagonal and zeros elsewhere.
Example
\[ I_{3\times 3} = \begin{bmatrix} 1 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 & 1 \end{bmatrix} \]
In R, we can create the identity matrix of size 3 by using the diag()
function:
I <- diag(3)
I
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1
8.5.4 Symmetric matrix
A symmetric matrix is a square matrix that remains unchanged when we transpose it, which means we swap its rows and columns.
Example
\[ S_{3\times 3} = \begin{bmatrix} 13 & -4 & 2\\ -4 & 11 & -2\\ 2 & -2 & 8 \end{bmatrix} \]
[,1] [,2] [,3]
[1,] 13 -4 2
[2,] -4 11 -2
[3,] 2 -2 8
In S matrix, the elements at positions (1,2) and (2,1) are both -4, the elements at positions (1,3) and (3,1) are both 2, and the elements at positions (2,3) and (3,2) are both -2. This reflects the symmetry property.
8.6 Basic matrix algebra
8.6.1 The transpose of a matrix
The transpose operation simply changes columns to rows of the original matrix with dimension \(m \times n\) to obtain a new matrix with dimension \(n \times m\).
Example
For a matrix A
:
\[ A_{2\times 3} = \begin{bmatrix} 4 & -1 & -5 \\ 0 & 1 & -2 \end{bmatrix} \]
the transpose matrix is:
\[ A^T_{3\times 2} = \begin{bmatrix} 4 & 0 \\ -1 & 1\\ 5 & -2 \end{bmatrix} \]
In R:
The transpose matrix is:
t(A)
[,1] [,2]
[1,] 4 0
[2,] -1 1
[3,] -5 -2
8.6.2 Matrix addition
Matrix addition is an operation performed between two matrices of the same dimensions. The addition of matrices involves adding corresponding elements of the matrices (element-wise addition) to create a new matrix of the same dimension.
Example
Suppose we have the A and B matrices:
\[ A_{2\times 3} = \begin{bmatrix} 4 & -1 & -5 \\ 0 & 1 & -2 \end{bmatrix} \]
\[ B_{2\times 3} = \begin{bmatrix} 3 & 1 & -5 \\ 0 & 2 & -2 \end{bmatrix} \]
The addition of the two matrices gives the following new matrix:
\[ A_{2\times 3} + B_{2\times 3}= \begin{bmatrix} 4 & -1 & -5 \\ 0 & 1 & -2 \end{bmatrix} + \begin{bmatrix} 3 & 1 & -5 \\ 0 & 2 & -2 \end{bmatrix} = \begin{bmatrix} 7 & 0 & -10 \\ 0 & 3 & -4 \end{bmatrix} \]
Here, the element in the first row and first column of the new matrix is \(4 + 3 = 7\), the element in the first row and second column is \(-1 + 1 = 0\), the element in the first row and third column is \(-5 - 5 = -10\), and so on.
In R:
A
[,1] [,2] [,3]
[1,] 4 -1 -5
[2,] 0 1 -2
[,1] [,2] [,3]
[1,] 3 1 -5
[2,] 0 2 -2
The addition:
A + B
[,1] [,2] [,3]
[1,] 7 0 -10
[2,] 0 3 -4
8.6.3 Scalar multiplication of matrices
In scalar multiplication, each element in the matrix is multiplied by the given number (scalar). For example:
Example
\[ -3* A_{2\times 3} = -3* \begin{bmatrix} 4 & -1 & -5 \\ 0 & 1 & -2 \end{bmatrix} = \begin{bmatrix} -12 & 3 & 15 \\ 0 & -3 & 6 \end{bmatrix} \]
Here, the element in the first row and first column of the new matrix is \(-3*4 = -12\), the element in the first row and second column is \(-3 * (-1) = 3\), the element in the first row and third column is \(-3 * (- 5) = 15\), and so on.
In R:
A
[,1] [,2] [,3]
[1,] 4 -1 -5
[2,] 0 1 -2
-3 * A
[,1] [,2] [,3]
[1,] -12 3 15
[2,] 0 -3 6
8.6.4 Element-wise multiplication of matrices (Hadamard product)
The element-wise multiplication of two matrices, A and B, of the same dimensions can be computed with the \(\odot\) operator.
Example
\[ A_{2\times 3} \odot B_{2\times 3}= \begin{bmatrix} 4 & -1 & -5 \\ 0 & 1 & -2 \end{bmatrix} \odot \begin{bmatrix} 3 & 1 & -5 \\ 0 & 2 & -2 \end{bmatrix} = \begin{bmatrix} 12 & -1 & 25 \\ 0 & 2 & 4 \end{bmatrix} \]
In this case, the element in the first row and first column of the new matrix is \(4*3 = 12\), the element in the first row and second column is \(-1 * 1 = -1\), the element in the first row and third column is \(-5 * (- 5) = 25\), and so on.
In R:
A
[,1] [,2] [,3]
[1,] 4 -1 -5
[2,] 0 1 -2
B
[,1] [,2] [,3]
[1,] 3 1 -5
[2,] 0 2 -2
The output will be a matrix of the same dimensions of the original matrices:
A * B
[,1] [,2] [,3]
[1,] 12 -1 25
[2,] 0 2 4
8.6.5 Multiplication of compatible matrices (matrix product)
Suppose we have two matrices, \(A_{m \times n}\) and \(C_{n \times m}\), in which the number of columns in the first matrix is equal to the number of rows in the second matrix (compatible matrices). The multiplication of matrix A with matrix C is defined as \(A \bullet C\) and is computed by performing dot product operations between the rows from the first matrix and the columns from the second matrix (row-by-column multiplication). Let’s illustrate it using an examples.
Example
We’ll start by demonstrating how to multiply a \(1 \times 3\) matrix by an \(3 \times 1\) matrix. The first is a row vector, such as \(\begin{bmatrix} 4 & -1 & -5 \end{bmatrix}\), and the second is a column vector, such as \(\begin{bmatrix} -5 \\ 2 \\ -2 \end{bmatrix}\). Therefore, the dot product is equal to the following:
\(\begin{bmatrix} 4 & -1 & -5 \end{bmatrix} \bullet \begin{bmatrix} -5 \\ 2 \\ -2 \end{bmatrix} = 4 * (-5) + (-1) * 2 + (-5) * (-2) = -20 -2 + 10 = -12\)
In R, this can be done either with one-dimensional atomic vectors or matrices.
- Vector notation:
- Matrix notation:
[,1] [,2] [,3]
[1,] 4 -1 -5
[,1]
[1,] -5
[2,] 2
[3,] -2
# matrix multiplication
A_row1 %*% C_col1
[,1]
[1,] -12
We ended up with a matrix multiplication equivalent to the familiar dot product of vectors (see Chapter 7).
Example
Now that we are familiar with the process of multiplying a row with a column, the multiplication of larger matrices becomes straightforward. Suppose that we have the A and C matrices:
\[ A_{2\times 3} = \begin{bmatrix} 4 & -1 & -5 \\ 0 & 1 & -2 \end{bmatrix} \]
\[ C_{3\times 2} = \begin{bmatrix} -5 & 5 \\ 2 & 1 \\ -2 & 0 \\ \end{bmatrix} \]
The row-by-column multiplication of the two matrices gives the following new matrix:
\[ A_{2\times 3} \bullet C_{3\times 2}= \begin{bmatrix} 4 & -1 & -5 \\ 0 & 1 & -2 \end{bmatrix} \bullet \begin{bmatrix} -5 & 5 \\ 2 & 1 \\ -2 & 0 \\ \end{bmatrix} = \begin{bmatrix} -12 & 19 \\ 6 & 1 \end{bmatrix} \]
We observe that the produced matrix has dimension \(2 \times 2\).
In this case:
the element in the first row and first column of the new matrix is the result of the dot product between the first row of A and the first column of C: \(\begin{bmatrix} 4 & -1 & -5 \end{bmatrix} \bullet \begin{bmatrix} -5 \\ 2 \\ -2 \end{bmatrix} = 4 * (-5) + (-1) * 2 + (-5) * (-2) = -20 -2 + 10 = -12\)
the element in the first row and second column of the new matrix is the result of the dot product between the first row of A and the second column of C: \(\begin{bmatrix} 4 & -1 & -5 \end{bmatrix} \bullet \begin{bmatrix} 5 \\ 1 \\ 0 \end{bmatrix} = 4 * 5 + (-1) * 1 + (-5) * 0 = 20 - 1 + 0 = 19\)
the element in the second row and first column of the new matrix is the result of the dot product between the second row of A and the first column of C: \(\begin{bmatrix} 0 & 1 & -2 \end{bmatrix} \bullet \begin{bmatrix} -5 \\ 2 \\ -2 \end{bmatrix} = 0 * (-5) + 1 * 2 + (-2) * (-2) = 0 + 2 + 4 = 6\)
the element in the second row and second column of the new matrix is the result of the dot product between the second row of A and the second column of C: \(\begin{bmatrix} 0 & 1 & -2 \end{bmatrix} \bullet \begin{bmatrix} 5 \\ 1 \\ 0 \end{bmatrix} = 0 * 5 + 1 * 1 + (-2) * 0 = 1\)
In R, this type of multiplication of two matrices can be performed with the dot (inner) product %*%
operator.
A
[,1] [,2] [,3]
[1,] 4 -1 -5
[2,] 0 1 -2
[,1] [,2]
[1,] -5 5
[2,] 2 1
[3,] -2 0
A %*% C
[,1] [,2]
[1,] -12 19
[2,] 6 1
Example
The matrices \(A_{2\times 3}\) and \(B_{2\times 3}\) are not compatible matrices. However, if we transpose the first matrix, we turn it into a \(3 \times 2\) matrix:
\[ A_{2\times 3} = \begin{bmatrix} 4 & -1 & -5 \\ 0 & 1 & -2 \end{bmatrix} \]
\[ A^T_{3\times 2} = \begin{bmatrix} 4 & 0 \\ -1 & 1 \\ -5 & -2 \end{bmatrix} \]
Now, the \(A^T_{3\times 2}\) and \(B_{2\times 3}\) matrices are compatible, so their product is well defined. In this case, we can multiply them:
\[ A^T_{3\times 2} \bullet B_{2\times 3}= \begin{bmatrix} 4 & 0 \\ -1 & 1 \\ -5 & -2 \end{bmatrix} \bullet \begin{bmatrix} 3 & 1 & -5 \\ 0 & 2 & -2 \end{bmatrix} = \begin{bmatrix} 12 & 4 & -20 \\ -3 & 1 & 3 \\ -15 & -9 & 29 \end{bmatrix} \]
In R:
t(A)
[,1] [,2]
[1,] 4 0
[2,] -1 1
[3,] -5 -2
B
[,1] [,2] [,3]
[1,] 3 1 -5
[2,] 0 2 -2
[,1] [,2] [,3]
[1,] 12 4 -20
[2,] -3 1 3
[3,] -15 -9 29
However, it is more efficient and faster using the crossprod()
function:
crossprod(A, B)
[,1] [,2] [,3]
[1,] 12 4 -20
[2,] -3 1 3
[3,] -15 -9 29
Before inner multiplying two matrices check that the dimensions are compatible. The number of columns of the first matrix must be equal to the number of rows of the second matrix.
8.6.6 The determinant of a square matrix
The determinant of a square matrix is a scalar value that can be computed from the matrix’s elements. Let’s consider a simple 2x2 matrix:
\[ E_{2 \times 2} = \begin{bmatrix} e_{11} & e_{12} \\ e_{21} & e_{22} \end{bmatrix} \]
To calculate the determinant of this matrix, we can use the formula: \[ detE = \begin{vmatrix} e_{11} & e_{12} \\ e_{21} & e_{22} \end{vmatrix} = e_{11}*e_{22} - e_{12}*e_{21} \] To calculate the determinant of a larger matrix, we can use the method of expansion by minors. Consider the \(3 \times 3\) matrix:
\[ E_{3\times 3} = \begin{bmatrix} e_{11} & e_{12} & e_{13}\\ e_{21} & e_{22} & e_{23}\\ e_{31} & e_{32} & e_{33} \end{bmatrix} \]
In this case, we can find the determinant using expansion by minors, we can choose any row or column and calculate the determinant using smaller \(2 \times 2\) matrices. Let’s choose the last row for this example:
\[ \det E = \begin{vmatrix} e_{11} & e_{12} & e_{13}\\ e_{21} & e_{22} & e_{23}\\ e_{31} & e_{32} & e_{33} \end{vmatrix} = e_{31}\begin{vmatrix} e_{12} & e_{13} \\ e_{22} & e_{23} \end{vmatrix} - e_{32}\begin{vmatrix} e_{11} & e_{13} \\ e_{21} & e_{23} \end{vmatrix} + e_{33}\begin{vmatrix} e_{11} & e_{12} \\ e_{21} & e_{22} \end{vmatrix} \]
Therefore:
\[ \Rightarrow detE = e_{31}(e_{12}*e_{23} - e_{13}*e_{22}) - e_{32}(e_{11}*e_{23} - e_{13}*e_{21}) + e_{33}(e_{11}*e_{22} - e_{12}*e_{21}) \]
Example
Let’s consider a 2x2 matrix:
\[ E_{2 \times 2} = \begin{bmatrix} 1 & -1 \\ 2 & 0 \end{bmatrix} \]
To calculate the determinant of this matrix, we can use the formula:
\[ \begin{vmatrix} 1 & -1 \\ 2 & 0 \end{vmatrix} = 1*0 - (-1)*2= 2 \]
In R:
Example
\[ \det E = \begin{vmatrix} 1 & -1 & 1\\ 2 & 0 & 1\\ 1 & 1 & 2 \end{vmatrix} = 1\begin{vmatrix} -1 & 1 \\ 0 & 1 \end{vmatrix} - 1\begin{vmatrix} 1 & 1 \\ 2 & 1 \end{vmatrix} + 2\begin{vmatrix} 1 & -1 \\ 2 & 0 \end{vmatrix} \]
Therefore:
\[ \Rightarrow detE = 1(-1*1 - 1*0) - 1(1*1 - 1*2) + 2(1*0 - (-1)*2) = -1 + 1 + 4 = 4 \]
8.6.7 The inverse of a matrix
Given a square matrix E its inverse is another square matrix of the same dimensions, denoted as \(E^{-1}\), such that when these two matrices are multiplied together, they yield the identity matrix, typically denoted as I. The inverse of a matrix can be computed if its determinant is non-zero. For example, matrix E is a square matrix and the det(E)
is not zero, so inverse exists (the matrix is invertible).
\[ E_{n \times n} \bullet E^{-1}_{n \times n} = I_{n \times n} \]
In R, we can use the generic built-in solve()
function to find the inverse of the matrix E:
# the solve() function takes a matrix as input and returns the matrix's inverse
E_inv <- solve(E)
E_inv
[,1] [,2] [,3]
[1,] -0.25 0.75 -0.25
[2,] -0.75 0.25 0.25
[3,] 0.50 -0.50 0.50
Alternatively, we can use the inv()
function from the matlib
package for the computation of a matrix’s inverse:
inv(E)
[,1] [,2] [,3]
[1,] -0.25 0.75 -0.25
[2,] -0.75 0.25 0.25
[3,] 0.50 -0.50 0.50
Therefore, we can verify that if we multiply the matrix \(E\) by its inverse \(E^{-1}\), we get back the identity matrix:
E %*% E_inv
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1
8.6.8 Application: calculation of the average using matrices
In ordinary algebra, the mean of a set of n
observations, \(v_1, v_2, v_3,...,v_i, ..., v_n\) is computed by adding all of the observations and dividing by the number of observations:
\[ \overline{v} = \frac{1}{n}\sum_{i=1}^{n}v_i \]
where \(\overline{v}\) is the mean of observations, \(\sum_{i=1}^{n}v_i\) is the sum of all observations, and \(n\) is the number of observations.
Let’s compute the mean using column vectors from matrix algebra.
First we define the column vectors:
\[ U_{n\times1} = \left[\begin{array}{cc} 1 \\ 1 \\ \vdots \\ 1 \end{array}\right] \]
and
\[ V_{n\times1} = \left[\begin{array}{c} \nu_1 \\ \nu_2 \\ \vdots \\ \nu_n \end{array}\right] \]
then the mean can be computed as follows:
\[ \frac{1}{n} \cdot U^T \cdot V = \frac{1}{n} \cdot \begin{bmatrix} 1 & 1 & 1 & ...& 1 \end{bmatrix} \cdot \begin{bmatrix} \nu_{1} \\ \nu_{2} \\ \nu_{3} \\ \vdots \\ \nu_{n} \\ \end{bmatrix} = \]
\[ = \frac{1}{n} \cdot \begin{pmatrix} 1\cdot v_{1} + 1\cdot v_{2} +1\cdot v_{3} +...1\cdot v_{n} \end{pmatrix} = \frac{1}{n}\sum_{i=1}^{n}v_i \]
where \(U^T\) is the transpose of \(U\).
For example:
[,1]
[1,] 1
[2,] 1
[3,] 1
[4,] 1
[5,] 1
[6,] 1
[7,] 1
V <- matrix(my_values, n, 1)
V
[,1]
[1,] 2
[2,] 5
[3,] 7
[4,] -4
[5,] 8
[6,] 6
[7,] 3
8.6.9 Eigenvalues and Eigenvectors
We have already mentioned that a symmetric matrix is a square matrix that is equal to its transpose. For example:
S
[,1] [,2] [,3]
[1,] 13 -4 2
[2,] -4 11 -2
[3,] 2 -2 8
t(S)
[,1] [,2] [,3]
[1,] 13 -4 2
[2,] -4 11 -2
[3,] 2 -2 8
A symmetric matrix guarantees that its eigenvalues are real numbers. Eigenvalues and eigenvectors are highly used by the data scientists as they are the core of the data science field. For example, eigenvalues and eigenvectors are very much useful in the principal component analysis which is a dimensionality reduction technique in machine learning.
The eigen()
built-in function in R calculates the eigenvalues and eigenvectors of a symmetric matrix. It returns a named list, with eigenvalues named values and eigenvectors named vectors:
ev <- eigen(S)
ev
eigen() decomposition
$values
[1] 17 8 7
$vectors
[,1] [,2] [,3]
[1,] 0.7453560 0.6666667 0.0000000
[2,] -0.5962848 0.6666667 0.4472136
[3,] 0.2981424 -0.3333333 0.8944272
The eigenvalues are always returned in decreasing order and are 17, 8, and 7.
- The first column vector \(\begin{bmatrix} 0.745 \\ -0.596 \\ 0.298 \end{bmatrix}\) represents the eigenvector corresponding to the eigenvalue 17.
- The second column vector \(\begin{bmatrix} 0.667 \\ 0.667 \\ -0.333 \end{bmatrix}\) corresponds to the eigenvector for the eigenvalue 8.
- The third column vector \(\begin{bmatrix} 0.000 \\ 0.447 \\ 0.894 \end{bmatrix}\) corresponds to the eigenvector for the eigenvalue 7.
8.7 Arrays
8.7.1 Creating an array
Arrays are similar to matrices but can have more than two dimensions. They’re created with an array()
function from base R:
, , 1
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
, , 2
[,1] [,2] [,3]
[1,] 7 9 11
[2,] 8 10 12
, , 3
[,1] [,2] [,3]
[1,] 13 15 17
[2,] 14 16 18
, , 4
[,1] [,2] [,3]
[1,] 19 21 23
[2,] 20 22 24
As we can see, arrays are an extension of matrices. Like matrices, they contain a single type of data (e.g., numeric).
We can find the type
, class
and the dimensions
of the array:
8.7.2 Indexing in an array
To access a particular matrix of the array, for example the 3rd matrix, we type:
# access the 3rd matrix of the array
my_array[, , 3]
[,1] [,2] [,3]
[1,] 13 15 17
[2,] 14 16 18
# access the 2nd row of the 3rd matrix of the array.
my_array[2, , 3]
[1] 14 16 18
# access the element in the 1st row and 3rd column of the 3rd matrix
my_array[1, 3, 3]
[1] 17