在矩阵中查找重复项

时间:2016-07-14 17:03:27

标签: matlab

考虑矩阵:

a = [1 2 
     1 3
     2 3
     4 5
     6 1]

我想找到a的每个唯一元素的重复项,并将它们的行放到不同的矩阵中。例如,这里可以说数字1的答案是:

a1 = [1 2
      1 3
      6 1]

数字2的答案是:

a2 = [1 2
      2 3]

3号的答案是:

a3 = [1 3
      2 3]
对于矩阵a的每个唯一元素,

等等。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

这样做:

temp=unique(a);
for k=1:numel(temp)
    [r,~]=find(a==temp(k));
    assignin('base', ['a' num2str(k)], a(sort(r),:)) 
end

<强>结果: -

>> a1

a1 =

     1     2
     1     3
     6     1

>> a2

a2 =

     1     2
     2     3

>> a3

a3 =

     1     3
     2     3

>> a4

a4 =

     4     5

>> a5

a5 =

     4     5

>> a6

a6 =

     6     1

答案 1 :(得分:0)

您可以使用any检查行中的任何元素是否包含所需的值。这将返回一个true的逻辑数组,其中行包含值。然后,您可以使用它来获取a的相关行。

result = a(any(a == value, 2), :);

我们可以为您创建一个匿名函数。

rows_that_contain_value = @(A, value)A(any(A == value, 2), :);

然后我们可以像这样使用

a = [1 2 
     1 3
     2 3
     4 5
     6 1]

a1 = rows_that_contain_value(a, 1);
a2 = rows_that_contain_value(a, 2);
a3 = rows_that_contain_value(a, 3);

如果我们想对a中的所有唯一值执行此操作,我们可以执行以下操作。

groups = arrayfun(@(x)rows_that_contain_value(a, x), unique(a), 'uniformoutput', 0);