R - 给定矩阵和幂,生成包含矩阵列的所有组合的多个矩阵

时间:2018-02-21 21:47:40

标签: r matrix combinations

给定矩阵mat(大小为N乘以M)和幂p(例如4),生成p矩阵,其中每个p - 矩阵包含该mat中该列的所有可能组合。

在我目前的方法中,我生成p - 矩阵,然后在下一次调用中使用它来生成p+1矩阵。这可以自动化吗?对于给定的功率p,而不是手动完成?

对于R来说,我是一个新手,并且明白有可能比以下尝试更有效和更优雅地实现此解决方案......

N = 5
M = 3
p = 4
mat = matrix(1:(N*M),N,M)
mat_1 = mat
mat_2 = t(sapply(1:N, function(i) tcrossprod(mat_1[i, ], mat[i, ])))
mat_3 = t(sapply(1:N, function(i) tcrossprod(mat_2[i, ], mat[i, ])))
mat_4 = t(sapply(1:N, function(i) tcrossprod(mat_3[i, ], mat[i, ])))

有人可以提供一些建议吗?我的目标是为给定矩阵mat和幂p创建一个函数,该函数在更自动的'中输出p个不同的矩阵。方式。

让我开始的相关问题:How to multiply columns of two matrix with all combinations

2 个答案:

答案 0 :(得分:3)

这解决了您的问题。

N = 5
M = 3
p = 4
mat = matrix(1:(N*M),N,M)
f=function(x) matrix(apply(x,2,"*",mat),nrow(x))
rev(Reduce(function(f,x)f(x), rep(c(f), p-1), mat, T,T))

答案 1 :(得分:1)

你可以做这样的事情

N = 5
M = 3
p = 4
mat = matrix(1:(N*M),N,M)

res_mat <- list()
res_mat[[1]] <- mat
for(i in 2:p) {
     res_mat[[i]] <- t(sapply(1:N, function(j) tcrossprod(res_mat[[i-1]][j, ], res_mat[[1]][j, ])))
}