我有一个非常大的矩阵(901x1801),我通过组合三个相似数组的值(其中包含重复值)来生成使用数学表达式的唯一代码。矩阵充满了这些代码。
我的问题是...如何检查矩阵 (901x1801) 的每个值是否唯一且不重复一次?
或者......谁能告诉我如何通过组合三个相似元素的数组来生成矩阵,以使每个生成的值都是唯一的。
尽早答复将非常适用。提前致谢。
我有一个非常大的矩阵(901x1801),我通过组合三个相似数组的值(其中包含重复值)来生成使用数学表达式的唯一代码。矩阵充满了这些代码。
我的问题是...如何检查矩阵 (901x1801) 的每个值是否唯一且不重复一次?
或者......谁能告诉我如何通过组合三个相似元素的数组来生成矩阵,以使每个生成的值都是唯一的。
尽早答复将非常适用。提前致谢。
使用大矩阵M
,要获取所有唯一值,请使用:
uniqueValues = unique(M(:));
然后,要了解是否有任何重复值,您可以使用:
repeatedValuesFound = numel(uniqueValues) ~= numel(M);
也就是说,如果唯一值数组与原始数组具有相同数量的元素,则原始数组的所有元素都必须是唯一的。
要查找 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 中重复的位置。