我有一个非常大的矩阵(901x1801),我通过组合三个相似数组的值(其中包含重复值)生成,以使用数学表达式生成唯一代码。矩阵填充了这些代码。
我的问题是......我如何检查矩阵(901x1801)的每个值是否唯一且一次不重复?
或... 任何人都可以告诉我如何通过组合三个相似元素的数组来生成矩阵,每个生成的值都是唯一的。
早期的回复将非常适合。 提前谢谢。答案 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中重复的位置。