R 带数值向量(不是矩阵向量)的MVM以及如何避免双重换位?

R 带数值向量(不是矩阵向量)的MVM以及如何避免双重换位?,r,matrix,R,Matrix,我有以下简化案例,这实际上是一个更大的性能热点: epsilon <- c(-3, -4) str(epsilon) num [1:2] -3 -4 Q <- matrix(c(2, 1, 0, 3, 1, 0), nrow=3, ncol=2) str(Q) num [1:3, 1:2] 2 1 0 3 1 0 Q [,1] [,2] [1,] 2 3 [2,] 1 1 [3,] 0 0 但是,如果只执行以下操作,则会得到不同的结果

我有以下简化案例,这实际上是一个更大的性能热点:

epsilon <- c(-3, -4)
str(epsilon)
num [1:2] -3 -4

Q <- matrix(c(2, 1, 0, 3, 1, 0), nrow=3, ncol=2)
str(Q)
num [1:3, 1:2] 2 1 0 3 1 0
Q
     [,1] [,2]
[1,]    2    3
[2,]    1    1
[3,]    0    0
但是,如果只执行以下操作,则会得到不同的结果(即第二行被翻转):

从数学上讲,
(epsilon*Q^T)^T
应该与
Q*epsilon^T
相同,但这不是我想要的(执行
Q%*%epsilon
将生成3x1结果)


有没有一种方法可以在不双重转置可能非常大的Q的情况下实现这一点?

如果
col
提供“Q”列的索引,使两个元素的长度相同,那么
rep
将更容易实现

Q * epsilon[col(Q)]
或者使用
rep

Q * rep(epsilon, each = nrow(Q))
或使用
扫描

sweep(Q, 2, epsilon, `*`)
Q * rep(epsilon, each = nrow(Q))
sweep(Q, 2, epsilon, `*`)