2013-10-22 108 views
0

我有一個矢量v和一個矩陣m。我想在R中得到以下結果。我該怎麼做?最佳和最快的方法將矢量多重耦合到矩陣R

 v = c(1, 2) 
    m = matrix(c(1, 0, 1, 1, 0, 2.5, 3.5, 4.3, 2, 5.5), nrow = 5) 
    result = matrix(c(1, 0, 1, 1, 0, 5, 7, 8.6, 4, 11), nrow = 5) 
    > result 
     [,1] [,2] 
    [1,] 1 5.0 
    [2,] 0 7.0 
    [3,] 1 8.6 
    [4,] 1 4.0 
    [5,] 0 11.0 
+0

有人可能會將Rcpp替代方案添加到該答案中的基準列表中。它應該贏了,我猜...像'Rcpp ::: cppFunction( 「arma :: mat sweep_mcolvec(arma :: mat A,arma :: colvec x) A.each_col()* = x ; return A; }「,depends =」RcppArmadillo「 )'。我的筆記本電腦最近沒有很好地進行基準測試,所以它不會是我。 – Frank

+0

嗨@Frank,我試過你的Rcpp代碼,並得到了'錯誤:'arma :: Mat :: each_col()[with eT = double]()* = x'我不知道'operator * ='不是Rcpp大師,所以就我所知。 – Aaron

回答

0

*確實元素方式乘法,但你需要通過柱做...

t(t(m) * v) 

或使用矩陣乘法...

m %*% diag(v) 
0

一種方法是使v轉換成與m相同大小的矩陣,然後再乘以。

> v[col(m)]*m 
    [,1] [,2] 
[1,] 1 5.0 
[2,] 0 7.0 
[3,] 1 8.6 
[4,] 1 4.0 
[5,] 0 11.0 
相關問題