2017-10-12 12 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の2つの行列を掛ける

+1

これは少し不明です。あなたのタイトルは「2つの行列を乗算する」と言っていますが、あなたはベクトル 'c(20,30,40)'としてリストしています。私は、これを '3x2'マトリックスに変換することを意図していると思いますので、' 2x5'マトリックスで乗算することができますか?また、 '(Intercept)'と名付けられた行は、最後に与えた式の代入として使用されている行ではなく、行名が逆になっていますか? –

+0

はい..実際には、3行5列の行列を取得するには、PJMPWrでc(20,30,40)の各数値を複数個置き、Interceptを追加します。 – 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行ですので、デフォルトの動作では1次元ベクトルに強制されます。 (help(`[`)を参照。)
  2. t(vec)
  3. 1 x 3行列にベクトルvecに変換(help(t)を参照。)行列乗算mat[2,] %*% t(vec)
  4. 、ベクターmat[2,]は、2つの引数が適合するために5 x 1マトリックスとして扱われます。 (help(`%*%`)を参照してください)。したがって、乗算の結果は5 x 3行列です。
  5. 5 x 3行列にベクトルmat[1,]を追加すると、ベクトルの要素は行列の列に沿ってリサイクルされます。
  6. 最後に結果を転置して、希望の3 x 5行列に変換します。
+0

行の名前に基づいて、私はあなたの行列の最初の行を傍受して、 '1.4589 * 20 - 13.2728'などとすると思います(' -13.2728 * 20 + 1.4589'ではなく書きました)。しかし、私が間違っていると仮定すると、 'mat [1、]'と 'mat [2、]' –

関連する問題