행렬과 스칼라 간의 사칙 연산에서는 일반적인 프로그래밍과 마찬가지로 +, -, *, /를 사용한다.
> x <- matrix(c(1, 2, 3, 4, 5, 6, 7, 8, 9), nrow=3) > x * 2 [,1] [,2] [,3] [1,] 2 8 14 [2,] 4 10 16 [3,] 6 12 18 > x / 2 [,1] [,2] [,3] [1,] 0.5 2.0 3.5 [2,] 1.0 2.5 4.0 [3,] 1.5 3.0 4.5
행렬 간의 덧셈과 뺄셈에는 +와 -를 사용한다.
> x <- matrix(c(1, 2, 3, 4, 5, 6, 7, 8, 9), nrow=3) > x + x [,1] [,2] [,3] [1,] 2 8 14 [2,] 4 10 16 [3,] 6 12 18 > x - x [,1] [,2] [,3] [1,] 0 0 0 [2,] 0 0 0 [3,] 0 0 0
행렬 곱에는 %*%를 사용한다.
> x <- matrix(c(1, 2, 3, 4, 5, 6, 7, 8, 9), nrow=3) > x [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9 > x %*% x [,1] [,2] [,3] [1,] 30 66 102 [2,] 36 81 126 [3,] 42 96 150
전치행렬은 t( )로 구한다.
> (x <- matrix(c(1, 2, 3, 4, 5, 6, 7, 8, 9), nrow=3)) [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9 > t(x) [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 [3,] 7 8 9
역행렬은 solve( )로 계산한다. 다음은 행렬 x의 역행렬을 구한 뒤 x와 곱해 그 결과가 단위행렬Identity Matrix이 되는지 확인하는 예다.
> (x <- matrix(c(1, 2, 3, 4), ncol=2)) [,1] [,2] [1,] 1 3 [2,] 2 4 > solve(x) [,1] [,2] [1,] -2 1.5 [2,] 1 -0.5 > x %*% solve(x) [,1] [,2] [1,] 1 0 [2,] 0 1
행렬의 차원은 nrow( ), ncol( )로 알 수 있으며, 각각 행의 수와 열의 수를 반환한다.
> (x <- matrix(c(1, 2, 3, 4, 5, 6), ncol=3)) [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 > nrow(x) [1] 2 > ncol(x) [1] 3
dim( )은 행렬뿐만 아니라 다양한 데이터 타입(예를 들면, 다음 절에서 설명하는 배열)에 적용 가능한 일반(범용) 함수Generic Function로, 데이터의 차원을 벡터로 반환한다. dim( )의 반환 값에 새로운 차원을 지정하면 데이터의 차원을 변경할 수 있다는 점이 특이하다. 다음은 2×3 차원의 행렬을 생성한 뒤 3×2 차원으로 바꾼 예다.
> x <- matrix(c(1, 2, 3, 4, 5, 6), ncol=3) > dim(x) [1] 2 3 > x [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 > dim(x) <- c(3, 2) > x [,1] [,2] [1,] 1 4 [2,] 2 5 [3,] 3 6