2017-04-07 7 views
3

通常の行列乗算の代わりに、要素単位の演算が必要です。以下では正常に動作します:行列とベクトルの要素ごとの積

# this works 
Bmat <- structure(c(3L, 3L, 10L, 3L, 4L, 10L, 5L, 8L, 8L, 8L, 3L, 8L, 8L, 2L, 6L, 10L, 2L, 8L, 3L, 9L), .Dim = c(10L, 2L)) 
yvec <- c(2, 2, 2, 2, 2, 2, 2, 2, 2, 2) 
Bmat * yvec 
#  [,1] [,2] 
# [1,] 6 6 
# [2,] 6 16 
# [3,] 20 16 
# [4,] 6 4 
# [5,] 8 12 
# [6,] 20 20 
# [7,] 10 4 
# [8,] 16 16 
# [9,] 16 6 
# [10,] 16 18 

しかし、次は失敗します。

# this fails 
Amat <- structure(c(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0), .Dim = c(10L, 2L)) 
xvec <- structure(c(1.83475682418716, 1.48154883122634, 1, 1, 1, 1, 1, 1, 1, 1), .Dim = c(10L, 1L)) 
Amat * xvec 
#Fehler in Amat * xvec : nicht passende Arrays 

それはなぜですか? Bmatが整数行列であることと関係がありますか? 2番目のコードをどうやって動作させることができますか?

+2

'アマ* as.numeric(d.b、デビッド・ヘックマン)@(xvec)' –

+0

をお試しください! –

答えて

2
class(xvec) 
[1] "matrix" 

dim(xvec) 
[1] 10 1 

class(Amat) 
[1] "matrix"  

dim(Amat) 
[1] 10 2 

2つの行列間の要素の賢明な乗算は、同じ次元を持つ場合にのみ可能です。だから、解決策はベクトルにxvecを変換することです。あなたのソリューションの両方が動作し、感謝:

Amat * c(xvec) 
#OR 
Amat * as.vector(xvec) 
関連する問題