【问题标题】:Cycling Through Possible Matrixes MatLab循环遍历可能的矩阵 MatLab
【发布时间】:2013-08-21 00:31:52
【问题描述】:

我正在尝试编写一个程序来检查 5 单独 5x5 矩阵的所有可能组合的结果,其中所有矩阵中的每个元素都是布尔值。但是,我的问题是我无法找到一种方法来使矩阵检查每个组合。

说明我希望 2x2 矩阵发生什么。我希望我的程序产生如下矩阵:

(1) [0 0;0 0] 
(2) [1 0;0 0] 
(3) [1 1;0 0]
(4) [1 1;1 0]
(5) [1 1;1 1]
(6) [1 0;0 1]
(7) [1 1;0 1]
…

以此类推,直到完成所有可能的矩阵。我如何才能做到这一点,以便我对这些矩阵组合中的每一个进行一些操作?

(我意识到这可能需要非常长的时间才能完全循环通过 5 5x5 矩阵,但是我也希望对更小的矩阵(3 3x3's)这样做而且我还想让它尽可能长时间地运行,以检查尽可能多的 5 5x5's 并查看,在我检查过的那些中,这是最好的结果。)

【问题讨论】:

  • 你能提供任何你迄今为止尝试过的代码吗?
  • 我完全不知道从哪里开始,我已经制作了 5 个矩阵:pos1=[p111 p112 p113 p114 p115;p121 p122 p123 p124 p125;p131 p132 p133 p134 p135; p141 p142 p143 p144 p145;p151 p152 p153 p154 p155]
    (继续 4 个矩阵)它会遍历每个元素的每一个组合,但我不知道如何做到这一点。
    我也不确定如何在这个网站上正确格式化,抱歉。我也刚刚意识到,在 5 个 5x5s 中可能存在的组合可能比合理的要多,但是我也希望在 3 个 3x3s 中进行。
  • 查看添加评论按钮下方的帮助 x)

标签: matlab matrix combinations


【解决方案1】:

所以,如您所见,您有多个零矩阵组合,您想加一个,对吧?

我们可以说您想要添加以下可能的组合。对于二维情况:

addOnes =

   Empty matrix: 1-by-0


onePossibleCombination =

     0     0
     0     0


addOnes =

     1


onePossibleCombination =

     1     0
     0     0


addOnes =

     2


onePossibleCombination =

     0     0
     1     0


addOnes =

     3


onePossibleCombination =

     0     1
     0     0


addOnes =

     4


onePossibleCombination =

     0     0
     0     1


addOnes =

     1     2


onePossibleCombination =

     1     0
     1     0


addOnes =

     1     3


onePossibleCombination =

     1     1
     0     0


addOnes =

     1     4


onePossibleCombination =

     1     0
     0     1


addOnes =

     2     3


onePossibleCombination =

     0     1
     1     0


addOnes =

     2     4


onePossibleCombination =

     0     0
     1     1


addOnes =

     3     4


onePossibleCombination =

     0     1
     0     1


addOnes =

     1     2     3


onePossibleCombination =

     1     1
     1     0


addOnes =

     1     2     4


onePossibleCombination =

     1     0
     1     1


addOnes =

     1     3     4


onePossibleCombination =

     1     1
     0     1


addOnes =

     2     3     4


onePossibleCombination =

     0     1
     1     1


addOnes =

     1     2     3     4


onePossibleCombination =

     1     1
     1     1

我们怎样才能做到这一点?我们所需要的只是获取 0、1、2、3 和 4 的所有组合。为此,我们使用nchoosek 方法,如下所示:

matrixSize = 2;
for k=0:matrixSize^2
  combinations=nchoosek(1:matrixSize^2,k);
  for m = 1:size(combinations,1)
    addOnes = combinations(m,:);
    onePossibleCombination = zeros(matrixSize,matrixSize);
    onePossibleCombination(addOnes) = 1;
    % Do your operation here with the matrix onePossibleCombination
  end
end

【讨论】:

  • 非常感谢您抽出宝贵时间帮助 Werner,这正是我所需要的。我从未听说过 addOnes 命令(我正在尝试自学 MatLab)。
  • @Jack 没有这样的命令addOnes。我使用的命令叫做nchoosekaddOnes 只是一个变量 x),实际上,它只是 combinations 变量中的一列,它是 nchoosek输出参数
  • @Jack 不要忘记接受你的回答,欢迎来到这里。
  • 啊好吧,我想我明白了。再次感谢。
  • @Jack 不要误导你,实际上它是来自组合变量的一行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 2013-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多