给定矩阵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
答案 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, ])))
}