Np.L.规范相比之下,舍入给出了奇怪的结果

2024-06-02 06:12:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用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,它就可以正常工作了。是否存在舍入问题?你知道吗


Tags: 数据in算法距离normfornpok