返回具有矩阵容差的唯一行

时间:2013-11-10 17:12:36

标签: matlab

我使用独特的函数来查找完整的秩矩阵(矩阵的唯一行),现在我需要唯一的

返回具有容差的唯一行的函数。有谁知道我该怎么做?

我很感激你的帮助。

2 个答案:

答案 0 :(得分:2)

我认为您可以使用sortrowsunique内部使用的内容)来实现此目的:

A = [1 2 3; 1 2.1 3; 1.001 2.001, 3.001; -4 5 6] % example data
tol = 0.01; % tolerance
[~, ii] = sortrows(A);
ii_unique = ii(logical([1; any(diff(A(ii,:))>tol,2)]));
A_unique_tol = A(sort(ii_unique),:) % result

此示例中的结果是:

A =

    1.0000    2.0000    3.0000
    1.0000    2.1000    3.0000
    1.0010    2.0010    3.0010
   -4.0000    5.0000    6.0000

A_unique_tol =

    1.0000    2.0000    3.0000
    1.0000    2.1000    3.0000
   -4.0000    5.0000    6.0000

像往常一样,对于不支持~作为输出参数的旧版Matlab版本,请按[~, ii] = sortrows(A);更改[vv, ii] = sortrows(A);

答案 1 :(得分:1)

这很难定义,假设您的公差为1。 那么[1; 2; 3; 4]会有什么结果呢?

当您有多个列时,定义可能会变得更具挑战性。

但是,如果您主要担心舍入问题,可以通过以下两种方法之一解决大部分问题:

  1. 舍入所有数字(考虑您的容差),然后使用unique
  2. 从第一行开始作为您的唯一设置,使用ismemberf确定每个新行是否唯一,如果是,请将其添加到您的唯一设置。
  3. 第一种方法的缺点是0.499999999和0.500000000可能不会被视为重复。虽然第二种方法的缺点是输入的顺序很重要。