如何将两个矩阵的列与所有组合相乘

时间:2017-02-24 19:25:50

标签: r

我喜欢将具有相同行的两个矩阵的列的所有可能组合相乘。这意味着两个矩阵,例如a[3x3]b[3x4]将生成具有元素a[i,j]*a[k,j]的3x4矩阵。 (ik表示从1到3的行,j表示从1到4的列)

我已经创建了一个示例,可以完成这项工作但是正在寻找没有for循环的优雅解决方案。

a <- matrix(1:12,3,4)
b <- matrix(1:9,3,3)
comb<-matrix(NA,3,(ncol(a)*ncol(b)))

for (i in 1:nrow(a)){
comb[i,]<-apply(expand.grid(a[i,],b[i,]),1,prod)
}
comb

这里a是3x3矩阵,b是3x4矩阵,梳子通过乘以各列来给出3x12矩阵的输出。我正在寻找优雅的解决方案,可以推广到这样的乘法到两个以上的矩阵。

1 个答案:

答案 0 :(得分:4)

以下是一些按长度递减顺序排列的单行:

t(sapply(1:3, function(i) tcrossprod(a[i, ], b[i, ])))

t(mapply(outer, split(a, 1:3), split(b, 1:3)))

matrix(apply(a %o% b, c(2, 4), diag), 3)

(b %x% a)[!!diag(3), ]