Получение наименьших числовых значений в основном списке, а затем, как часто оно появляется - PullRequest
1 голос
/ 12 февраля 2020

Вчера я спросил, как рассчитать евклидово для трехмерных координат, и понял:

import math
from math import sqrt

# returns array of euclidian distances
def calc_distance(point, points): 
    ret_dists = []
    for dest_point in points:
        dist = sum([pow(x1-x2, 2) for x1, x2 in zip(point, dest_point)])
        ret_dists.append(round(pow(dist, 0.5), 3))
    return ret_dists

dA = []; dB = []; dC = [];

distclassA = calc_distance([1,0,1],[[0,1,0],[0,1,1],[1,2,1],[1,2,0]])
distclassB = calc_distance([1,0,1],[[1,2,2],[2,2,2],[1,2,-1],[2,2,3]])
distclassC = calc_distance([1,0,1],[[-1,-1,-1],[0,-1,-2],[0,-1,1],[-1,-2,1]])

dA.append(distclassA)
dB.append(distclassB)
dC.append(distclassC)

master = dA + dB + dC
print(master)

Это дает вам:

[[1.732, 1.414, 2.0, 2.236], [2.236, 2.449, 2.828, 3.0], [3.0, 3.317, 1.414, 2.828]]

Для моего ответа, что означает этот ответ заключается в том, что для моей тестовой точки данных я хочу пометить ее как в группе А, группе В или группе C. Рассчитанные евклидовы расстояния относятся к каждой группе, поэтому в каждой группе 4 (x, y, z) координат и 3 группы. Итак, возникает проблема, я некоторое время думал о том, как написать сценарий, который просто скажет мне, к какой группе принадлежит моя контрольная точка (1,0,1), исходя из того, насколько она близка к каждой группе. Поскольку я увеличиваю количество соседей точек (это проблема KNN) с K = 1 до K = 3 или K = 4, становится очевидным, что контрольная точка принадлежит группе A, поскольку расстояния наименьшие.

Как видите, я сохранил каждое евклидово расстояние, заданное в отдельных списках dA, dB и d C. Затем я объединил их в основной список, мастер. Я думал, что это может быть способом, но я чувствую, что проще, но дольше просто записать циклы в go через каждый список dA, dB и d C, чтобы найти 1 ближайшую точку, затем 2 ближайших точки, затем 3 и скоро. Таким образом, я мог бы тогда иметь операторы if, чтобы, если в списке было больше «более коротких» точек расстояния, оно им принадлежало.

Но я не уверен на 100%, так как я должен go об этом? Любой пример кода будет принята с благодарностью! Еще раз спасибо!

...