检查大型矩阵matlab中的重复条目

时间:2013-04-11 17:32:22

标签: matlab duplicates

我有一个非常大的矩阵(901x1801),我通过组合三个相似数组的值(其中包含重复值)生成,以使用数学表达式生成唯一代码。矩阵填充了这些代码。

我的问题是......我如何检查矩阵(901x1801)的每个值是否唯一且一次不重复?

或... 任何人都可以告诉我如何通过组合三个相似元素的数组来生成矩阵,每个生成的值都是唯一的。

早期的回复将非常适合。 提前谢谢。

2 个答案:

答案 0 :(得分:5)

使用大矩阵M,要获取所有唯一值,请使用:

uniqueValues = unique(M(:));

然后,要了解是否有任何重复值,您可以使用:

repeatedValuesFound = numel(uniqueValues) ~= numel(M);

也就是说,如果唯一值数组与原始数组具有相同数量的元素,则原始数组的所有元素必须是唯一的。

答案 1 :(得分:3)

要在M中查找重复项的位置,请使用以下代码:

V = M(:);                           % flatten
[Vs, Vi] = sort(V);                 % sort, Vi are indices into V
delta = Vs(2:end) - Vs(1:end-1);    % delta==0 means duplicate
dup1 = Vi(find(delta == 0));        % dup1 has indices of duplicates in V
dup2 = Vi(find(delta == 0) + 1);    % dup2 has the corresponding other 
                                    % rewrite to [row col]
[dup1(:,1) dup1(:,2)] = ind2sub(size(M), dup1);
[dup2(:,1) dup2(:,2)] = ind2sub(size(M), dup2);

dup1和dup2的行现在包含M中重复的位置。