2017-10-12 4 views
-3
structure(c(-13.2728762809309, 1.4589335335744, 0.484047921906014, 
0.961191008159664, 9.8283305061549, 0.719751064235688, -12.9935586779498, 
1.54850677442014, -13.1416306849761, 1.45529160258359), .Dim = c(2L, 
5L), .Dimnames = list(c("(Intercept)", "PJMPWr[, x]"), NULL)) 

이러한 계수를 사용하여 예측하고 예를 들어를 사용하여 새 행렬을 생성해야합니다. 그것은, -13.2728 * 20 + 1.4589에 동일하도록 C (20,30,40)는 -13.2728 * 30 + 1.4589, -13.2728 * 40 1.4589 ..R에서 두 행렬 곱하기

+1

이것은 약간 명확하지 않습니다. 제목에 "두 개의 행렬 곱하기"라고 쓰여 있지만 하나를 벡터'c (20,30,40) '로 나열했습니다. 나는 여러분의 의도가 이것을'3x2' 행렬 (절편을위한 행을 추가함으로써)로 바꾸는 것이므로,'2x5' 행렬로 곱할 수 있다고 생각하십니까? 또한,'(가로 채기)'라고 이름 붙인 행은 마지막에 제공 한 수식에서 가로 채기로 사용되지 않습니다 - 행 이름이 바뀌 었습니까? –

+0

예 .. 실제로 3 x 5 매트릭스를 얻으려면 PJMPWr로 c (20,30,40)의 각 숫자를 곱하고 절편을 추가하십시오. – jkl

답변

1

당신은 mapply와 함께 다음 시도 할 수 :

당신이 그것을 할 수
mapply(function(x, y) x[2] * y + x[1], 
     #your coefficients 
     as.data.frame(mat), 
     #your vector replicated 5 times 
     replicate(5, c(20, 30, 40), simplify = FALSE)) 

#   V1  V2  V3  V4  V5 
#[1,] 15.90579 19.70787 24.22335 17.97658 15.96420 
#[2,] 30.49513 29.31978 31.42086 33.46164 30.51712 
#[3,] 45.08447 38.93169 38.61837 48.94671 45.07003 
2

한 가지 방법은 다음과 같이이다 :

(mat <- structure(c(-13.2728762809309, 1.4589335335744, 0.484047921906014, 0.961191008159664, 9.8283305061549, 
        0.719751064235688, -12.9935586779498, 1.54850677442014, -13.1416306849761, 1.45529160258359), 
        .Dim = c(2L, 5L), .Dimnames = list(c("(Intercept)", "PJMPWr[, x]"), NULL))) 
#     [,1]  [,2]  [,3]  [,4]  [,5] 
# (Intercept) -13.272876 0.4840479 9.8283305 -12.993559 -13.141631 
# PJMPWr[, x] 1.458934 0.9611910 0.7197511 1.548507 1.455292 

(vec <- c(20, 30, 40)) 
# [1] 20 30 40 

t(mat[2,] %*% t(vec) + mat[1,]) 
#   [,1]  [,2]  [,3]  [,4]  [,5] 
# [1,] 15.90579 19.70787 24.22335 17.97658 15.96420 
# [2,] 30.49513 29.31978 31.42086 33.46164 30.51712 
# [3,] 45.08447 38.93169 38.61837 48.94671 45.07003 

일부 설명 :

  1. mat[1,]mat[2,]은 단일 행이므로 기본 동작은 1 차원 벡터로 강제 변환됩니다. (help(`[`) 참조).
  2. t(vec)1 x 3 행렬 벡터 vec 변환 (help(t) 참조).
  3. 를 행렬 곱셈 mat[2,] %*% t(vec)에서, 벡터 mat[2,] 두 인수 순응성 확인하는 5 x 1 매트릭스로서 취급된다. (help(`%*%`)을 참조하십시오.) 따라서 곱셈의 결과는 5 x 3 행렬입니다.
  4. 벡터 5 x 3 행렬에 벡터 mat[1,]을 추가하면 벡터의 요소가 행렬의 열을 따라 재활용됩니다.
  5. 마지막으로 결과를 원하는 자리로 변환하기 위해 전치됩니다.
+0

행 이름을 바탕으로 행렬의 첫 번째 행을 가로 채기로하고 싶으므로'1.4589 * 20 - 13.2728' 등으로 끝날 것입니다 ('-13.2728 * 20 + 1.4589'보다는 쓴). 그러나 내가 잘못 가정한다면'mat [1,]'과'mat [2,]' –