Np.linalg.norm округление дает странные результаты по сравнению - PullRequest
0 голосов
/ 26 сентября 2018

Я реализую алгоритм DBSCAN в Python и должен сравнить расстояния между точками до заданного порога:

    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 работами («ок»утверждение доказывает это), и точка добавляется в список соседей, но иногда это не работает вообще, и я совершенно не понимаю этого.Если я добавлю небольшое количество, например, 0,001, оно будет работать как задуманоЕсть ли проблема округления?

...