algorithm - 如何查找矩阵的行,其中唯一元素和重复元素的顺序相同,但值不一定相同

标签 algorithm matlab matrix

我不太确定如何表述这个问题。假设我有以下矩阵:

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% 确定您可以在同一调用中使用 rowsstable 参数 - 但我认为您可以。

尝试一下,看看它是否有效 - 如果您需要更多信息,请提出问题。

关于algorithm - 如何查找矩阵的行,其中唯一元素和重复元素的顺序相同,但值不一定相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21542382/

相关文章:

python - 递归地对列表的元素求和

algorithm - 快速插入和搜索

matlab - 从 MATLAB 中的匿名函数访问当前作用域

matlab - 创建具有相同行的新表的有效方法,但每行重复不同次数

c++ - 编译时模板值推导

用固定值替换非对角线元素

c - 将线段延伸特定距离

java - 为什么我的 JNA 结构映射会产生奇怪的字段值?

c - 正交相机投影矩阵

根据伪代码实现计数排序但会产生段错误