问题描述
在 Matlab 中,有这个 unique
命令 返回数组中唯一的行.这是一个非常方便的命令.
但问题是我不能给它分配容差——在双精度中,我们总是必须在一个精度内比较两个元素.是否有内置命令可以在一定容差范围内返回唯一元素?
从 R2015a 开始,终于有一个函数可以做到这一点,uniquetol
(在 R2015a 之前,参见 我的其他答案):
uniquetol
在容差范围内设置唯一.
uniquetol
类似于 unique
.unique
执行精确比较,而 uniquetol
使用容差执行比较.
语法很简单:
C = uniquetol(A,TOL)
使用容差 TOL
返回 A
中的唯一值.
语义是:
C
的每个值都在 A
的一个值的容差范围内,但 C
中没有两个元素在彼此的容差范围内.C
按升序排列.两个值 u
和 v
在容差范围内,如果:
abs(u-v)
它也可以操作ByRows
",容差可以通过输入DataScale
"而不是输入数据中的最大值进行缩放.>
但是有一个关于解决方案唯一性的重要说明:
可以有多个有效的 C
输出满足条件,C
中没有两个元素在彼此的容差范围内."例如,交换 A
中的列可能会导致返回不同的解决方案,因为输入是按列按字典顺序排序的.另一个结果是 uniquetol(-A,TOL)
可能给出与 -uniquetol(A,TOL)
不同的结果.
还有一个新函数 ismembertol
与 ismember
的关联方式与上述相同.
In Matlab, there is this unique
command that returns thew unique rows in an array. This is a very handy command.
But the problem is that I can't assign tolerance to it-- in double precision, we always have to compare two elements within a precision. Is there a built-in command that returns unique elements, within a certain tolerance?
As of R2015a, there is finally a function to do this, uniquetol
(before R2015a, see my other answer):
The syntax is straightforward:
As are the semantics:
It can also operate "ByRows
", and the tolerance can be scaled by an input "DataScale
" rather than by the maximum value in the input data.
But there is an important note about uniqueness of the solutions:
There is also a new function ismembertol
is related to ismember
in the same way as above.
这篇关于返回具有容差的唯一元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!