Mer effektiv måte å flette kolonner i pandaer

stemmer
0

Koden min beregner euklidske avstanden mellom alle punktene i et sett av prøver jeg har. Det jeg vil vite er generelt dette den mest effektive måten å utføre noen operasjon mellom alle elementer i et sett, og deretter plotte dem, for eksempel for å gjøre en korrelasjonsmatrise.

Indeksen av prøvene anvendt for å initialisere dataframe og tilveiebringe merkinger. Deretter 3d koordinater er gitt som tuppeler i three_D_coordinate_tuple_list men dette kan lett være en hvilken som helst måling og deretter den variable avstand kan være en hvilken som helst operasjon. Jeg er nysgjerrig på å finne en mer effektiv løsning for å gjøre hver kolonne og deretter flette dem igjen ved hjelp av pandaer eller numpy. Er jeg fyller opp noe minne med min løsning? Hvordan kan jeg gjøre dette renere?

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
Publisert på 14/01/2020 klokken 00:05
kilden bruker
På andre språk...                            


1 svar

stemmer
2

Setup

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

Som vi kan gjøre om til en kvadratisk form med 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.        ]])
Svarte 14/01/2020 kl. 00:29
kilden bruker

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