2013-10-22 45 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 
相关问题