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, `*`)