Реализация k ближайших соседей из матрицы расстояний?

Я попробую ABCD A 0 1 3 2 B 5 0 2 2 C 3 2 0 1 D 2 3 4 0 g, чтобы сделать следующее:

Учитывая dataFrame расстояния, я хочу идентифицировать k-ближайших соседей для каждого элемента. Пример:

A: B D
B: C D
C: D B
D: A B

Если k = 2, он должен вернуться:

n + 1

Расстояния не обязательно симметричны. Я думаю, что где-то есть что-то, что делает это эффективным способом с использованием Pandas DataFrames. Но я ничего не могу найти?

Домашний код также очень приветствуется! :)

Спасибо!

python,pandas,

0

Ответов: 1


1 принят

Как я вижу это, я просто нахожу nнаименьшие числа / расстояния / соседи для каждой строки и удаляю 0, которые затем дадут вам nчисла / расстояния / соседи. Имейте в виду, что код не будет работать, если у вас есть нуль! Разрешены только диагонали.

import pandas as pd
import numpy as np



X = pd.DataFrame([[0, 1, 3, 2],[5, 0, 2, 2],[3, 2, 0, 1],[2, 3, 4, 0]])

X.columns = ['A', 'B', 'C', 'D']
X.index = ['A', 'B', 'C', 'D']

X = X.T

for i in X.index:

    Y = X.nsmallest(3, i)
    Y = Y.T
    Y = Y[Y.index.str.startswith(i)]
    Y = Y.loc[:, Y.any()]

    for j in Y.index:
        print(i + ": ", list(Y.columns))

Это печатает:

A:  ['B', 'D']
B:  ['C', 'D']
C:  ['D', 'B']
D:  ['A', 'B']
питон, панды,
Похожие вопросы
Яндекс.Метрика