2

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

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

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

尽早答复将非常适用。提前致谢。

4

2 回答 2

5

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

uniqueValues = unique(M(:));

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

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

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

于 2013-04-11T17:59:13.750 回答
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 中重复的位置。

于 2013-04-11T18:35:06.640 回答