Более эффективный способ слияния столбцов в панде

голоса
0

Мой код вычисляет евклидово расстояние между всеми точками в наборе образцов у меня есть. То, что я хочу знать, в общем, это самый эффективный способ выполнить некоторые операции между всеми элементами в наборе, а затем построить их, например, чтобы сделать матрицу корреляции.

Индекс образцов используется для инициализации dataframe и предоставить метки. Тогда 3d координаты предоставляются в качестве кортежей в three_D_coordinate_tuple_list, но это легко может быть любое измерение, а затем переменное расстояние может быть любая операция. Мне интересно найти более эффективное решение для создания каждого столбца, а затем объединять их снова с помощью панд или NumPy. Могу ли я засоряя любую память с моим решением? Как я могу сделать это чище?

def euclidean_distance_matrix_maker(three_D_coordinate_tuple_list, index_of_samples):
#list of tuples
#well_id or index as series or list

n=len(three_D_coordinate_tuple_list)
distance_matrix_df=pd.DataFrame(index_of_samples)    

for i in range(0, n):
    column=[]
    #iterates through all elemetns calculates distance vs this element
    for j in range(0, n):
        distance=euclidean_dist_threeD_for_tuples( three_D_coordinate_tuple_list[i],
                                         three_D_coordinate_tuple_list[j])
        column.append(distance)
    #adds euclidean distance to a list which overwrites old data frame then 
    #is appeneded with concat column wise to output matrix
    new_column=pd.DataFrame(column)
    distance_matrix_df=pd.concat([distance_matrix_df, new_column], axis=1)

distance_matrix_df=distance_matrix_df.set_index(distance_matrix_df.iloc[:,0])
distance_matrix_df=distance_matrix_df.iloc[:,1:]
distance_matrix_df.columns=distance_matrix_df.index
Задан 13/01/2020 в 22:05
источник пользователем
На других языках...                            


1 ответов

голоса
2

Настроить

import numpy as np

x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

scipy.spatial.distance_matrix

from scipy.spatial import distance_matrix

distance_matrix(x, x)

array([[ 0.        ,  5.19615242, 10.39230485],
       [ 5.19615242,  0.        ,  5.19615242],
       [10.39230485,  5.19615242,  0.        ]])

Numpy

from scipy.spatial.distance import squareform

i, j = np.triu_indices(len(x), 1)
((x[i] - x[j]) ** 2).sum(-1) ** .5

array([ 5.19615242, 10.39230485,  5.19615242])

Что мы можем сделать в квадратную форму с squareform

squareform(((x[i] - x[j]) ** 2).sum(-1) ** .5)

array([[ 0.        ,  5.19615242, 10.39230485],
       [ 5.19615242,  0.        ,  5.19615242],
       [10.39230485,  5.19615242,  0.        ]])
Ответил 13/01/2020 в 22:29
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more