2017-11-16 12 views
1

프로그래밍 및 코딩을 처음 사용하고 있으며 현재 통계 인증의 일환으로 학교에서 R을 학습 중입니다.대각선 행렬의 값을 특정 값으로 대체 R

대각선에 1이 있고 대각선에 0이 들어있는 'mat'이라는 10 x 10 매트릭스를 생성해야합니다.

내가 사용하여이 작업을 수행 한 다음

mat<-diag(10) 
mat 
    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 
    [1,] 1 0 0 0 0 0 0 0 0  0 
    [2,] 0 1 0 0 0 0 0 0 0  0 
    [3,] 0 0 1 0 0 0 0 0 0  0 
    [4,] 0 0 0 1 0 0 0 0 0  0 
    [5,] 0 0 0 0 1 0 0 0 0  0 
    [6,] 0 0 0 0 0 1 0 0 0  0 
    [7,] 0 0 0 0 0 0 1 0 0  0 
    [8,] 0 0 0 0 0 0 0 1 0  0 
    [9,] 0 0 0 0 0 0 0 0 1  0 
    [10,] 0 0 0 0 0 0 0 0 0  1 
다음

나는 K도 = 3이 정체성 구조를 가지고 행렬의 akxk 블록을 분할하고이 수행되는 방법을 여러 가지 방법을 설명하도록 요청하고 이.

mat2<-mat[c(1,2,3),c(1,2,3)] 
mat2 
      [,1] [,2] [,3] 
    [1,] 1 0 0 
    [2,] 0 1 0 
    [3,] 0 0 1 

지금까지 너무 좋은 것 같아요 :

나는 단지 다음을 수행이 작업을 수행하는 방법을 알아 냈어?

  [,1] [,2] [,3] 
    [1,] 1 .5 .25 
    [2,] .5 1 .5 
    [3,] .25 .5  1 

그러나, 지금은 정말 붙어있어, 난 지금이 ​​같은 매트릭스 매트 (mat2)의 블록 대각 부분을 교체하도록 요청하고 mat2으로, 어떻게 다음에 대해 이동하는 아무 생각이 없다 내 교수는 또한 바깥 쪽 기능을 사용하면 더 쉽게 만들 수 있다고 암시하고있다. 어째서 이렇게 할 수 있을지 전혀 모르겠다. upper.tri와 lower.tri 함수를 사용해 보았지만 그다지 성공적이지 못했다.

대단히 감사하겠습니다. 미리 감사드립니다. 준비 교체 매트릭스가있는 경우

+0

다시 가로 질러 만들기 위해 루프를 넣어 "얼마나 많은 방법?" 또 다른 방법은'mat [2 : 4, 2 : 4] '입니다. "replace"는 관련 문서를 보게됩니다. help.search ("replace", package = "base")' – Frank

답변

1

:

mat<-diag(10) 
replacement <- matrix(c(1,.5,.25,.5,1,.5,.25,.5,1), nrow=3, byrow=T) 
mat[c(1,2,3),c(1,2,3)] <- replacement 

는 전체 대각선

for(idx in 1:8){ 
    mat[c(idx,idx+1,idx+2),c(idx,idx+1,idx+2)] <- replacement 
} 
mat 
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 
[1,] 1.00 0.50 0.25 0.00 0.00 0.00 0.00 0.00 0.00 0.00 
[2,] 0.50 1.00 0.50 0.25 0.00 0.00 0.00 0.00 0.00 0.00 
[3,] 0.25 0.50 1.00 0.50 0.25 0.00 0.00 0.00 0.00 0.00 
[4,] 0.00 0.25 0.50 1.00 0.50 0.25 0.00 0.00 0.00 0.00 
[5,] 0.00 0.00 0.25 0.50 1.00 0.50 0.25 0.00 0.00 0.00 
[6,] 0.00 0.00 0.00 0.25 0.50 1.00 0.50 0.25 0.00 0.00 
[7,] 0.00 0.00 0.00 0.00 0.25 0.50 1.00 0.50 0.25 0.00 
[8,] 0.00 0.00 0.00 0.00 0.00 0.25 0.50 1.00 0.50 0.25 
[9,] 0.00 0.00 0.00 0.00 0.00 0.00 0.25 0.50 1.00 0.50 
[10,] 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.25 0.50 1.00