我想在一定的公差范围内找到数组的唯一元素
例如,对于数组/列表
[1.1 , 1.3 , 1.9 , 2.0 , 2.5 , 2.9]
函数会返回
[1.1 , 1.9 , 2.5 , 2.9]
如果公差是0.3
有点像 MATLAB 函数
http://mathworks.com/help/matlab/ref/uniquetol.html
(但此功能使用相对公差,绝对公差就足够了)
实现它的 pythonic 方法是什么? (numpy
有特权)
最佳答案
将A
作为输入数组并将tol
作为容差值,我们可以使用NumPy broadcasting
进行矢量化处理。 , 像这样 -
A[~(np.triu(np.abs(A[:,None] - A) <= tol,1)).any(0)]
sample 运行-
In [20]: A = np.array([2.1, 1.3 , 1.9 , 1.1 , 2.0 , 2.5 , 2.9])
In [21]: tol = 0.3
In [22]: A[~(np.triu(np.abs(A[:,None] - A) <= tol,1)).any(0)]
Out[22]: array([ 2.1, 1.3, 2.5, 2.9])
注意 1.9
消失了,因为我们的 2.1
在 0.3
的公差范围内。然后,1.1
为 1.3
和 2.0
为 2.1
。
请注意,这将创建一个具有“链式接近度”检查的唯一数组。举个例子:
In [91]: A = np.array([ 1.1, 1.3, 1.5, 2. , 2.1, 2.2, 2.35, 2.5, 2.9])
In [92]: A[~(np.triu(np.abs(A[:,None] - A) <= tol,1)).any(0)]
Out[92]: array([ 1.1, 2. , 2.9])
因此,1.3
因 1.1
而消失,1.5
因 1.3
而消失。
关于python - 在 python 中使用公差唯一化数组/列表(相当于 uniquetol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57190309/