【问题标题】:Check for duplicate entries in a large matrix matlab检查大型矩阵matlab中的重复条目
【发布时间】:2013-04-12 02:40:31
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你写的是你的矩阵“充满了这些代码”,有些不清楚,你的数组是否包含数字或字符串(表达式)?
  • 我要检查的矩阵填充了我用 3 个不同的数组(数字)生成的代码。我必须使用特定的数据数组来生成这些唯一代码。我不能只使用随机数。

标签: matlab duplicates


【解决方案1】:

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

uniqueValues = unique(M(:));

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

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

也就是说,如果唯一值数组的元素个数与原数组相同,那么原数组的所有元素都必须是唯一的。

【讨论】:

  • 你不需要M(:)。唯一的总是返回向量。
  • 亲爱的 Pusuit,很遗憾,我必须使用特定的数据数组来生成这些唯一代码。我不能只使用随机数。但是,我的主要问题是检查矩阵(901x1801)中的所有代码是否都是唯一的,并且它们中没有一个与其他代码重复。检查这么大的数组对我来说是个问题。
  • 谁在使用随机数? unique 函数应该适用于任何数字矩阵或字符串元胞数组。
  • 对不起,哥们一开始没有理解你的答案。它工作得很好。但不幸的是,我无法弄清楚如何构建这样的矩阵,而不会从我定义的数组中复制。你能帮我解决这个问题吗?可能是因为我的值只是被 0.2 隔开。任何想法..
  • 听起来这可能是一个有趣的 stackoverflow 问题。为了使其易于理解,您需要编写一个玩具大小(可能是 4×3)的示例,其中包含有代表性的输入和所需的输出属性。目前尚不清楚您的要求。
【解决方案2】:

要查找 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 中重复的位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多