Как перебирать строки в наборе данных для вычисления расстояния

#python #pandas #numpy #iteration #knn

#python #панды #numpy #итерация #knn

Вопрос:

у меня есть набор данных Iris, и я хочу рассчитать расстояние между всеми строками, то есть 0 и 1, 0 и 2 ….. , 1 и 2, 1 и 3 …. для KNN. мой код:

 import numpy as np
from sklearn import datasets
import pandas as pd
#1 Handle the data
iris = datasets.load_iris()
x = iris.data[:, :4]
y = iris.target.reshape((150,1))

def shuffle(x,y,percentage):
    iris_data = np.concatenate((x,y), axis=1)
    shuffling = iris_data[np.random.permutation(len(iris_data))]
    train, test = np.split(shuffling,[int(percentage*len(iris_data))])
    x_train = train[:, :4]
    y_train = train[:, -1]
    x_test = test[:, :4]
    y_test = test[:, -1]
    return [iris_data, x_train, y_train, x_test, y_test]

shuf = shuffle(x,y,0.7)
x_train= shuf[1]; y_train= shuf[2]
x_test= shuf[3]; y_test= shuf[4]

#2 Distance function
def distance(x, x_test, y, y_test):
    cont= 0
    dist = {}
    for i in range(x.shape[0]):
        for j in range(x.shape[0]):
            cont  = (x[i] - x_test[j])**2
            dist[i] = (np.sqrt(cont), y[i]) 
    return dist
 

но я получаю словарь с массивами numpy (4,) вместо массива скаляров.
я пытался использовать itertools.combinations, но у меня есть некоторые ошибки.
еще один вопрос: как я могу сохранить свои выходные данные в dataframe с расстояниями и метками вместо dict (dist = {}) ?
Спасибо