|
My Coding >
Software >
R >
R matrix
R matrix
Matrix in R are in fact rectangular array. It is possible to initialize matrix by reshaping vector into a two dimensional structure
In the following code we will combine 6 elements of vector into 3 rows and 2 columns. And we will fill it by columns (byrow=FALSE parameter)
> M <- matrix(c(1,2,3,10,10,30), nrow=3, ncol=2, byrow=F)
> M
[,1] [,2]
[1,] 1 10
[2,] 2 10
[3,] 3 30
It is possible to access to individual element, to any row or column:
> M[1,2] # individual element
[1] 10
> M[1,] # Row
[1] 1 10
> M[,2] # Column
[1] 10 10 30
It is possible to convert matrix back to vector by function c()
> b <- c(B)
> b
[1] 1 2 3 10 10 30 100 200 300
Binding two matrices
If the matrices have some identical size, then it is possible to bind them by function cbind()
> M <- matrix(c(1,2,3,10,10,30), nrow=3, ncol=2, byrow=F)
> N <- matrix(c(100, 200, 300), nrow=3, ncol=1)
> B <- cbind(M, N)
> B
[,1] [,2] [,3]
[1,] 1 10 100
[2,] 2 10 200
[3,] 3 30 300
Diagonal matrix
Matrix with non-zero elements located diagonally, called diagonal matrix. It is possible to create this matrix by function diag()
> d <-diag(c(2,4,6))
> d
[,1] [,2] [,3]
[1,] 2 0 0
[2,] 0 4 0
[3,] 0 0 6
Identity matrix
If you only specify the size of diagonal matrix, then it will create identity matrix
> i <- diag(3)
> i
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1
Basic matrix operations
R give very wide selection of tools to work with matrices. Lets check some of them: - det() - Determinant of the matrix
- qr() - QR decomposition
- svd() - Returns named list with singular value, and canonical u and v matrices for svd decomposition
- eigen() - Returns eigen values and eigen vectors of our matrix
- solve() - Returns inverse matrix
> M <- matrix(c(1,3,4,-1,0,5,4,11,34), nrow=3, ncol=3, byrow=F)
> det(M)
[1] 63
> qr(M)
$qr
[,1] [,2] [,3]
[1,] -5.0990195 -3.726207 -33.928091
[2,] 0.5883484 3.480716 11.370339
[3,] 0.7844645 -0.922809 -3.549648
$rank
[1] 3
$qraux
[1] 1.196116 1.385258 3.549648
$pivot
[1] 1 2 3
attr(,"class")
[1] "qr"
> svd(M)
$d
[1] 36.5715204 2.6657656 0.6462128
$u
[,1] [,2] [,3]
[1,] -0.1076815 -0.5574869 -0.82317254
[2,] -0.3065248 -0.7690334 0.56091901
[3,] -0.9457522 0.3127234 -0.08807287
$v
[,1] [,2] [,3]
[1,] -0.1315303 -0.60533960 0.7850247
[2,] -0.1263573 0.79568289 0.5923872
[3,] -0.9832261 -0.02127673 -0.1811455
> eigen(M)
$values
[1] 35.993251+0.000000i -0.496625+1.226251i -0.496625-1.226251i
$vectors
[,1] [,2] [,3]
[1,] 0.09997148+0i 0.4337928+0.5357119i 0.4337928-0.5357119i
[2,] 0.29841589+0i 0.7055059+0.0000000i 0.7055059+0.0000000i
[3,] 0.94918579+0i -0.1501591-0.0674553i -0.1501591+0.0674553i
> solve(M)
[,1] [,2] [,3]
[1,] -0.8730159 0.8571429 -0.17460317
[2,] -0.9206349 0.2857143 0.01587302
[3,] 0.2380952 -0.1428571 0.04761905
###Matrix multiplications
There are two different typo of matrix multiplications in R: - * - element by element multiplication
- %*% - Proper full matrix multiplication
> N <-diag(3)
> M*N
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 0 0
[3,] 0 0 34
> M%*%N
[,1] [,2] [,3]
[1,] 1 -1 4
[2,] 3 0 11
[3,] 4 5 34
Published: 2021-11-10 12:21:05
|
Last 10 artitles
9 popular artitles
|