2017-04-07 177 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

'艾買提* as.numeric(XVEC)' –

+0

@(d.b,大衛的Heckmann):你的兩個解決方案的工作,謝謝! –

回答

2
class(xvec) 
[1] "matrix" 

dim(xvec) 
[1] 10 1 

class(Amat) 
[1] "matrix"  

dim(Amat) 
[1] 10 2 

兩個矩陣之間的元素明智乘法只有當它們具有相同的維度時纔是可能的。所以,解決方案是將xvec轉換爲向量。嘗試

Amat * c(xvec) 
#OR 
Amat * as.vector(xvec)