我不太确定如何表述这个问题。假设我有以下矩阵:
A=[1 0 0;
0 0 1;
0 1 0;
0 1 1;
0 1 2;
3 4 4]
给定第 1 行,我想找到所有行:
- 第 1 行中唯一的元素,在另一行中的同一列中也是唯一的,但不一定具有相同的值
- 并且如果第1行中有重复值的元素,则另一行中的相同列中也有重复值,但不一定是相同的值
例如,在矩阵 A 中,如果给我第 1 行,我想找到第 4 行和第 6 行。
最佳答案
现在无法对此进行测试,但我认为以下方法会起作用:
A=[1 0 0;
0 0 1;
0 1 0;
0 1 1;
0 1 2;
3 4 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) = B(ii,jj-1)+1;
end
end
end
最后我们有一个数组 B,其中“相似的索引具有相似的值”,并且您要查找的行现在是相同的。
现在你可以做
[C, ia, ic] = unique(B,'rows','stable');
disp('The answer you want is ');
disp(ia);
而你想要的答案将在变量 ia
中。参见 http://www.mathworks.com/help/matlab/ref/unique.html#btb0_8v .我不是 100% 确定您可以在同一调用中使用 rows
和 stable
参数 - 但我认为您可以。
尝试一下,看看它是否有效 - 如果您需要更多信息,请提出问题。
关于algorithm - 如何查找矩阵的行,其中唯一元素和重复元素的顺序相同,但值不一定相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21542382/