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