Matlab:如何生成包含1和/或0的所有组合和排列的3x3矩阵集(具有一个约束)
我想生成一组3x3矩阵,其中包含所有排列和1和/或0的组合(即,包括0矩阵和1矩阵),但有一个约束:如果任何行(如“a”)包含多个1项,则在其中一列中有1项的任何其他行(如“b”)也必须在另一列中包含1项(s) 其中行“a”包含一个1条目 我希望这是清楚的,如果有任何帮助,我将非常感激 谢谢Matlab:如何生成包含1和/或0的所有组合和排列的3x3矩阵集(具有一个约束),matlab,matrix,Matlab,Matrix,我想生成一组3x3矩阵,其中包含所有排列和1和/或0的组合(即,包括0矩阵和1矩阵),但有一个约束:如果任何行(如“a”)包含多个1项,则在其中一列中有1项的任何其他行(如“b”)也必须在另一列中包含1项(s) 其中行“a”包含一个1条目 我希望这是清楚的,如果有任何帮助,我将非常感激 谢谢 Harry下面的答案旨在迭代所有这些矩阵,并使用它们进行doStuff。如果要在内存中分配所有可能性,这可能不是最有效的方法 该方法基于这样一个事实,即给定范围内(此处为0到2^9)的二进制表示将枚举该范围
Harry下面的答案旨在迭代所有这些矩阵,并使用它们进行
doStuff
。如果要在内存中分配所有可能性,这可能不是最有效的方法
该方法基于这样一个事实,即给定范围内(此处为0到2^9)的二进制表示将枚举该范围内0和1的所有可能组合
检查约束或多或少直接遵循您的描述,结果有点冗长:-)
我不确定我是否得到了它,但您是否在寻找列和最多为1的所有3x3二进制矩阵?描述您的需求、请某人为您编写代码或解释如何编写代码的问题与堆栈溢出无关。请确定有关编程的特定问题。包括尝试的解决方案,解释结果与期望结果的差异,以及您收到的任何错误消息。请阅读这一页,我不明白你施加的限制。你能添加一些例子吗?我只需要使用dec2bin创建一个长度为9的向量,并将其重塑为3x3x3。这是最近演示的,请看这里:谢谢,这正是我想要得到的!并为任何滥用论坛的行为向其他人道歉,我知道这是下一次。
enumerateMatrices(3)
% Function enumerateMatrices:
function result = enumerateMatrices(n)
result = [];
for i = 1:2^(n*n)
array = dec2bin(i-1, n*n) - '0';
matrix = reshape(array, n, n);
if ~checkConstraint(matrix, n)
continue;
end
result(:, :, end+1) = matrix; %#ok<AGROW>
doStuff(matrix);
end
end
function met = checkConstraint(matrix, n)
met = true;
for i=1:n
countOnes = sum(matrix(i, :));
if (countOnes <= 1)
continue;
end
samePositions = matrix(:, matrix(i, :) == 1);
sumSamePositions = sum(samePositions, 2);
if ~all(sumSamePositions == 0 | sumSamePositions == countOnes)
met = false;
end
end
end
function doStuff(matrix)
matrix;
end
...
ans(:,:,122) =
1 0 1
1 0 1
0 1 0
ans(:,:,123) =
1 1 0
1 1 0
0 0 0
ans(:,:,124) =
1 1 0
1 1 0
0 0 1
ans(:,:,125) =
1 1 1
1 1 1
0 0 0
...