将向量乘以R中矩阵的最佳和最快方法

将向量乘以R中矩阵的最佳和最快方法,r,R,我有一个向量v和一个矩阵m。我想在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

我有一个向量
v
和一个矩阵
m
。我想在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

*
按元素进行乘法,但需要按列进行乘法

t( t(m) * v)
或者使用矩阵乘法

m %*% diag(v)

一种方法是将
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

有人可能会将Rcpp替代方案添加到该答案中的基准列表中。我想它应该会赢……类似于
Rcpp:::cppFunction(“arma::mat sweep_mcolvec(arma::mat A,arma::colvec x){A.each_col()*=x;return A;}”,dependens=“RcppArmadillo”)
。我的笔记本电脑最近没有很好地进行基准测试,所以不会是我。嗨@Frank,我尝试了你的Rcpp代码,得到了
错误:没有匹配的'arma::Mat::each_col()[with eT=double]()*=x
我不是Rcpp专家,所以这就是我所知道的。