考虑矩阵:
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
的每个唯一元素,等等。有什么建议吗?
答案 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);