programing

R에서 행렬의 역

nasanasas 2020. 9. 24. 07:55
반응형

R에서 행렬의 역


행렬의 역수를 계산하는 데 권장되는 방법이 무엇인지 궁금합니다.

내가 찾은 방법이 만족스럽지 않은 것 같습니다. 예를 들면

> c=rbind(c(1, -1/4), c(-1/4, 1))  
> c  
      [,1]  [,2]  
[1,]  1.00 -0.25  
[2,] -0.25  1.00  
> inv(c)  
Error: could not find function "inv"  
> solve(c)    
          [,1]      [,2]  
[1,] 1.0666667 0.2666667  
[2,] 0.2666667 1.0666667  
> solve(c)*c  
            [,1]        [,2]  
[1,]  1.06666667 -0.06666667  
[2,] -0.06666667  1.06666667  
> qr.solve(c)*c  
            [,1]        [,2]  
[1,]  1.06666667 -0.06666667  
[2,] -0.06666667  1.06666667  

감사!


solve(c)올바른 역을 제공합니다. 코드의 문제는 행렬 곱셈에 잘못된 연산자를 사용하고 있다는 것입니다. solve(c) %*% cR에서 행렬 곱셈을 호출 하려면 사용해야 합니다.

R은를 호출 할 때 요소 별 곱셈을 수행합니다 solve(c) * c.


MASS 패키지 에서 ginv () (Moore-Penrose 일반화 역) 함수를 사용할 수 있습니다.


속도에 관심 solve()이 있고 특이점에 대해 걱정할 필요가없는 경우 ginv()다음을 확인할 수 있으므로 훨씬 더 빠르기 때문에 선호해야합니다 .

require(MASS)
mat <- matrix(rnorm(1e6),nrow=1e3,ncol=1e3)

t0 <- proc.time()
inv0 <- ginv(mat)
proc.time() - t0 

t1 <- proc.time()
inv1 <- solve(mat)
proc.time() - t1 

참고 URL : https://stackoverflow.com/questions/11995832/inverse-of-matrix-in-r

반응형