当前位置: 首页 > 知识库问答 >
问题:

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

何灼光
2023-03-14

给定矩阵mat(大小NbyM)和幂,p(例如,4),产生p矩阵,其中每个p-th矩阵包含所有mat中的列在该程度上的可能组合。

在我当前的方法中,我生成p-th矩阵,然后在下一次调用中使用它来生成p1th矩阵。对于给定的功率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, ])))

有人能提供一些建议吗?我的目标是为给定的矩阵创建一个函数,并以更“自动化”的方式输出不同的矩阵。

让我开始学习的相关问题:如何将两个矩阵的列与所有组合相乘

共有2个答案

霍建章
2023-03-14

你可以做这样的事

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, ])))
}
祁通
2023-03-14

这就解决了你的问题。

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))
 类似资料:
  • 基于我下面链接的相关问题(请参见@Aleh solution):我希望只计算给定幂的矩阵中列之间的唯一乘积。 例如,对于N=5,M=3,p=2,我们得到列(1,1),(1,2),(1,3),(2,1),(2,2),(2,3),(3,1),(3,2),(3,3)的乘积。我想修改(@Aleh)代码,只计算(1,1)、(1,2)、(1,3)、(2,2)、(2,3)、(3,3)列之间的乘积。但我想对每个第

  • 我正在使用OpenCV一段时间,现在我需要这种类型的乘法: 定义一个矩阵,其中包含类型为1的元素。矩阵的大小为:M X N。矩阵必须与Vector相乘,Vector的大小为:N X 1,包含双

  • 问题内容: 我正在尝试编写一种算法,用于在给定的子矩阵中查找子矩阵。为了解决这个问题,我编写了以下代码: 这段代码可以正常工作,但是我不确定这是问题的确切解决方案还是可以解决。请提供您的专家意见。提前致谢。 问题答案: 该算法对4×4矩阵和2×2子矩阵进行了硬编码。否则,它看起来像蛮力算法。 我会这样表示: 如果您想要更有效的方法,建议您将它们压扁,如下所示: 并在此序列中搜索以下模式: 使用标准

  • MATLAB提供产生基本矩阵的四个函数: zeros 产生一个全零矩阵 ones 产生一个全1矩阵 rand 产生一个元素是均匀分布随机数的矩阵 randn 产生一个元素是正态分布的随机数的矩阵 例如: Z = zeros(2,4) Z = 0 0 0 0 0 0 0 0 F = 5*ones(3,3) F = 5

  • 问题内容: 我有以下内容: 如何在XYZ_2上执行与在XYZ_2上相同的操作?我会以某种方式首先重塑数组吗? 问题答案: 您似乎正在尝试的最后一个轴 与最后一个 。因此,您可以像这样使用- 相关帖子了解。 为了完整起见,在交换的最后两个轴后,我们当然也可以使用,例如- 这将不如一个高效。 运行时测试- 一般而言,涉及张量时,效率要高得多。由于的轴只有一个,因此我们可以通过重整,使用,获取结果并将其

  • 我有一个由6列组成的数据框。生成矩阵的最快方法是什么,该矩阵具有以下功能: 步骤1)col1*col1a, col2*col2a, col3*col3a, col4*col4a 步骤2)col_new=(col1*col1a)-col2*col2a)/(col1a-col2a) 使用for循环是选择之一——但是有什么方法可以更快地实现这一点。 我需要有1x3,1x4,1x5,2x3,2x4等等的列