我喜欢将具有相同行的两个矩阵的列的所有可能组合相乘。这意味着两个矩阵,例如a[3x3]
和b[3x4]
将生成具有元素a[i,j]*a[k,j]
的3x4矩阵。 (i
和k
表示从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矩阵的输出。我正在寻找优雅的解决方案,可以推广到这样的乘法到两个以上的矩阵。
答案 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), ]