python - 在 python 中使用公差唯一化数组/列表(相当于 uniquetol)

标签 python numpy unique

我想在一定的公差范围内找到数组的唯一元素

例如,对于数组/列表

[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.10.3 的公差范围内。然后,1.11.32.02.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.31.1 而消失,1.51.3 而消失。

关于python - 在 python 中使用公差唯一化数组/列表(相当于 uniquetol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57190309/

相关文章:

python - 安装Jupyter笔记本的困难

python - 什么是逻辑? softmax 和 softmax_cross_entropy_with_logits 有什么区别?

javascript - 如何检查对象的重复数组,然后将 bool 值与OR ||合并算子

proxy - 当服务器在 Varnish 反向代理之后(反过来又在负载均衡器之后)时,在apache日志中获取客户端IP地址

python - 在 Cython 和 NumPy 中包装 C 函数

mysql - SQL 检查列值是否变化

python - pandas python 中的 SQL 查询

python - 设置wx.Frame大小(wxPython - wxWidgets)

python - 如何像访问 pandas 数据框一样快速访问 numpy 数组

python - 从 OLS 回归结果中读取 coef 值