我正在尝试编写一个程序来检查 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 )我还想让它尽可能长时间地运行以检查尽可能多的 5 5x5 并看到我检查过的那些,这是最好的结果。)
答案 0 :(得分:2)
所以,正如你所看到的,你想要添加一个零矩阵的几种组合,对吗?
我们可以说您想要添加一个可能的组合。对于二维情况:
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