Effizienter zu verschmelzen Spalten in Pandas

stimmen
0

Mein Code berechnet den euklidischen Abstand zwischen allen Punkten in einer Reihe von Proben, die ich habe. Was ich wissen möchte, ist im Allgemeinen dies der effizienteste Weg, um etwas zwischen allen Elementen in einem Satz zu führen und sie dann plotten, zum Beispiel, um eine Korrelationsmatrix zu machen.

Der Index der Proben wird verwendet, um den Datenrahmen und bieten Etiketten zu initialisieren. Dann werden die 3D-Koordinaten werden als Tupel in three_D_coordinate_tuple_list vorgesehen, aber dies leicht eine Messung sein könnte, und dann wird der variable Abstand jeder Vorgang sein könnte. Ich bin gespannt auf eine effizientere Lösung zu machen jede Spalte zu finden, und sie dann wieder mit Pandas oder numpy verschmelzen. Bin ich zu verstopfen jeden Speicher mit meiner Lösung auf? Wie kann ich diese sauberer machen?

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
Veröffentlicht am 14/01/2020 um 00:05
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
2

Installieren

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])

Welche können wir in eine quadratische Form machen mit 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.        ]])
Beantwortet am 14/01/2020 um 00:29
quelle vom benutzer

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