谢谢,弗洛里斯。唯一调用无法正常工作,我认为您也打算在其中使用矩阵 B。这是我设法做的,虽然它不是那么干净:
A=[1 0 0 1;
0 0 1 3;
0 1 0 1;
0 1 1 0;
0 1 2 2;
3 4 4 3;
5 9 9 4];
B = zeros(size(A));
for ii = 1:size(A,1)
r = A(ii,:);
B(ii,1) = 1;
for jj = 2:size(A,2)
c = find(r(1:jj-1)==r(jj));
if numel(c) > 0
B(ii,jj) = B(ii,c);
else
B(ii,jj) = max(B(ii,:))+1; % need max to generalize to more columns
end
end
end
match = zeros(size(A,1)-1,size(A,2));
for i=2:size(A,1)
for j=1:size(A,2)
if B(i,j) == B(1,j)
match(i-1,j)=1;
end
end
end
index=find(sum(match,2)==size(A,2));
在嵌套循环中,我检查它下面的行中的元素是否在正确的列中匹配。如果存在完美匹配,则该行的总和应为行维度。
当我针对特定问题进行概括时,我正在处理矩阵填充一组特定的基本大小(A,2)数字。因此,对于 base 4 和更大的值,在 else 语句中需要一个 max 语句以防止匹配。否则,对于给定行中的某些数字组合,当没有元素时,可能会出现重复元素。