Np.linalg.norm四舍五入给出了比较奇怪的结果

时间:2018-09-26 08:11:07

标签: python python-3.x numpy comparison rounding

我正在Python中实现DBSCAN算法,必须将点之间的距离与给定阈值进行比较:

    Neighbours = []
    for i,P in enumerate(X):
        print(np.linalg.norm(P - Q))
        if (np.linalg.norm(Q-P)) <= eps:
            print("ok")
            Neighbours += [i]

但是对于epsilon = 0.1和这个简单的数据集: X = np.array([[-10.1,-20.3], [2.0, 1.5], [4.3, 4.4], [4.3, 4.6], [4.3, 4.5], [2.0, 1.6], [2.0, 1.4]])

这是输出的一部分(这些点一个接一个地取,并与数据集中的其他点进行比较):

0.0
ok
24.9329099786
28.5910825259
28.76404005
28.6775173263
25.0203916836
24.8455227355
24.9329099786
0.0
ok
3.70135110466
3.86005181312
3.78021163429
0.1
0.1
28.5910825259
3.70135110466
0.0
ok
0.2
0.1
ok
3.6235341864
3.78021163429
28.76404005
3.86005181312
0.2
0.0
ok
0.1
ok
3.78021163429
3.94081209905
28.6775173263
3.78021163429
0.1
ok
0.1
ok
0.0
ok
3.70135110466

如您所见,有时与0.1的比较有效(“ ok”语句证明了这一点),并且该点已添加到邻居列表中,但有时根本不起作用,我对此一无所知。 如果我添加少量(如0.001),它将按预期工作。是否涉及一些舍入问题?

0 个答案:

没有答案