0

我使用独特的功能来找到一个满秩矩阵(矩阵的唯一行),现在我需要唯一

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

我很感谢你的帮助。

4

2 回答 2

2

我认为你可以这样做sortrows(这是unique内部使用的):

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);

于 2013-11-10T18:42:40.870 回答
1

这很难很好地定义,假设您的容差为 1。那么 的结果是[1; 2; 3; 4]什么?

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

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

  1. 将所有数字四舍五入(考虑到您的容差),然后使用unique
  2. 从第一行作为您的唯一集开始,用于ismemberf确定每个新行是否唯一,如果是,将其添加到您的唯一集。

第一种方法的缺点是 0.499999999 和 0.500000000 可能不会被视为重复项。而第二种方法的弱点是输入的顺序很重要。

于 2013-11-11T10:23:22.627 回答