在R中,可以使用
要执行交叉乘积,需要将M1中的每一行
但是,我希望得到乘积
我可以在R中使用嵌套循环来实现这一点,但速度非常慢,而且我的矩阵非常大。是否有像
例子:
%*%
在两个矩阵M1:n x p
和M2:p x d
之间执行交叉乘积,其中一个维度长度是相同的。要执行交叉乘积,需要将M1中的每一行
1..n
与M2中的每一列1..d相对应相乘,然后求结果向量的总和p_M1 x p_M2
。但是,我希望得到乘积
prod(p_M1 x p_M2)
而不是总和。我可以在R中使用嵌套循环来实现这一点,但速度非常慢,而且我的矩阵非常大。是否有像
%*%
一样快的替代方法?例子:
set.seed(1)
a <- matrix(sample((1:100) / 100, 15), ncol = 3)
b <- matrix(sample((1:100) / 100, 15), ncol = 5)
# This produces the usual cross-product...
a %*% b
# ...which can be done also using loops
do.call('cbind', lapply(1:5, function(i) {
sapply(1:5, function(j) {
sum(a[i,] * b[,j])
})
}))
# But I need to do the product of the paired vectors instead of the sum. I could use a nested loop but it takes hours.
do.call('cbind', lapply(1:5, function(i) {
sapply(1:5, function(j) {
prod(a[i,] * b[,j])
})
}))
matrixStats
具有rowProds
和colProds
函数,这些函数非常快。 - lmo