softscients.com | Tulisan ini dibuat ketika sedang bekerja melakukan penulisan ulang source code matlab kedalam R. Ada sedikit beberapa perbedaan sintaks antara R dan matlab. Jadi tulisan ini agar kalian juga bisa belajar dengan mudah lho! Operasi matrix ada 2 yaitu
- Operasi skalar dan
- Operasi matrix
Operasi skalar pada matrix
Untuk membuat matrix didasarkan pada sebuah vector, misalkan kita punya matrix ukuran 2×3 seperti berikut
Dan variabel skalar
a = matrix(c(4,6,7,9,3,2),nrow=2,ncol=3) k = 3
Maka untuk operasi tambah, kurang, kali, dan bagi sangat mudah, cukup menggunakan sintaks berikut
> a+k [,1] [,2] [,3] [1,] 7 10 6 [2,] 9 12 5 > a-k [,1] [,2] [,3] [1,] 1 4 0 [2,] 3 6 -1 > a/k [,1] [,2] [,3] [1,] 1.333333 2.333333 1.0000000 [2,] 2.000000 3.000000 0.6666667 > a*k [,1] [,2] [,3] [1,] 12 21 9 [2,] 18 27 6
Namun jika ada kita mempunyai matrix b dengan informasi sebagai berikut
b = c(3,4) b = cbind(b)
Kalau kalian menggunakan matlab dan octave, operasi seperti tambah, kurang, bagi, dan kali, sangat mudah karena dianggap sebuah skalar. Namun ketika dicoba di R, akan terjadi masalah karena dimensi yang berbeda!
> a [,1] [,2] [,3] [1,] 4 7 3 [2,] 6 9 2 > b b [1,] 3 [2,] 4 > a+b Error in a + b : non-conformable arrays
Tentu harus dibuat duplikasi data matrx b agar ukurannya sama dengan matrix a yaitu
Operasi diatas disebut dengan repmat (replication matrix) yang bisa kalian temui pada package pracma, jika belum ada, kalian harus install package di R dan jangan lupa untuk loading kedalam environment R. Function repmat() seperti contoh berikut yaitu duplikasi sebanyak 3 kolom
> a+repmat(b,1,3) [,1] [,2] [,3] [1,] 7 10 6 [2,] 10 13 6
Hal tersebut bisa digunakan untuk operasi kurang, bagi, dan kali
> a-repmat(b,1,3) [,1] [,2] [,3] [1,] 1 4 0 [2,] 2 5 -2 > a/repmat(b,1,3) [,1] [,2] [,3] [1,] 1.333333 2.333333 1.0 [2,] 1.500000 2.250000 0.5 > a*repmat(b,1,3) [,1] [,2] [,3] [1,] 12 21 9 [2,] 24 36 8
Operasi matrix
Khusus untuk operasi matrix yaitu perkalian antar matrix yaitu dengan sintaks %*%
a = matrix(c(4,6,7,9,3,2),nrow=2,ncol=3) > a [,1] [,2] [,3] [1,] 4 7 3 [2,] 6 9 2 > b=matrix(c(5,6,3,2,1,9),nrow=3,ncol=2) > b [,1] [,2] [1,] 5 2 [2,] 6 1 [3,] 3 9
Maka untuk operasi perkalian matrix sebagai berikut
> a%*%b [,1] [,2] [1,] 71 42 [2,] 90 39
Berikut tabel sintaks untuk operasi matrix di R yang perlu kalian tahu
- A * B : Element-wise multiplication
- A %*% B : Matrix multiplication
- A %o% B : Outer product. AB’
- crossprod(A,B) dan crossprod(A) : A’B and A’A respectively.
- t(A) : Transpose
- diag(x) : Creates diagonal matrix with elements of x in the principal diagonal
- diag(A) : Returns a vector containing the elements of the principal diagonal
- diag(k) : If k is a scalar, this creates a k x k identity matrix. Go figure.
- solve(A, b) : Returns vector x in the equation b = Ax (i.e., A-1b)
- solve(A): Inverse of A where A is a square matrix.
- ginv(A) :
- Moore-Penrose Generalized Inverse of A.
- ginv(A) requires loading the MASS package.
- y<-eigen(A)
- y$val are the eigenvalues of A
- y$vec are the eigenvectors of A
- y<-svd(A)
- Single value decomposition of A.
- y$d = vector containing the singular values of A
- y$u = matrix with columns contain the left singular vectors of A
- y$v = matrix with columns contain the right singular vectors of A
- R <- chol(A) : Choleski factorization of A. Returns the upper triangular factor, such that R’R = A.
- y <- qr(A)
- QR decomposition of A.
- y$qr has an upper triangle that contains the decomposition and a lower triangle that contains information on the Q decomposition.
- y$rank is the rank of A.
- y$qraux a vector which contains additional information on Q.
- y$pivot contains information on the pivoting strategy used.
- cbind(A,B,…) : Combine matrices(vectors) horizontally. Returns a matrix.
- rbind(A,B,…) : Combine matrices(vectors) vertically. Returns a matrix.
- rowMeans(A) : Returns vector of row means.
- rowSums(A) : Returns vector of row sums.
- colMeans(A): Returns vector of column means.
- colSums(A): Returns vector of column sums.