我使用独特的功能来找到一个满秩矩阵(矩阵的唯一行),现在我需要唯一
返回具有容差的唯一行的函数。有谁知道我该怎么做?
我很感谢你的帮助。
我认为你可以这样做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);
这很难很好地定义,假设您的容差为 1。那么 的结果是[1; 2; 3; 4]
什么?
当您有多个列时,定义可能会变得更具挑战性。
但是,如果您最担心舍入问题,则可以通过以下两种方法之一解决大部分问题:
unique
ismemberf
确定每个新行是否唯一,如果是,将其添加到您的唯一集。第一种方法的缺点是 0.499999999 和 0.500000000 可能不会被视为重复项。而第二种方法的弱点是输入的顺序很重要。