With A
作为输入数组和tol
作为容差值,我们可以采用矢量化方法NumPy broadcasting http://docs.scipy.org/doc/numpy-1.10.1/user/basics.broadcasting.html,就像这样——
A[~(np.triu(np.abs(A[:,None] - A) <= tol,1)).any(0)]
样本运行 -
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])
Notice 1.9
离开是因为我们有2.1
在承受范围内0.3
. Then, 1.1
消失了1.3
and 2.0
for 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])
Thus, 1.3
消失了,因为1.1
and 1.5
消失了,因为1.3
.