Как набрать скорость при измерении расстояния для chi2_contingency за счет устранения петли - PullRequest
0 голосов
/ 06 июня 2019

У меня очень медленный цикл, с которым я мог бы помочь. У меня есть пандас DataFrame, в котором мне нужно расстояние хи-квадрат между каждой строкой. Я сделал это так, чтобы он был столбцовым, и это позволило мне увеличить скорость примерно на 25%. Я видел несколько постов, в которых для увеличения скорости используется широковещательное вещание, но я не понимаю, как его применить.

from scipy.stats import chi2_contingency
import pandas as pd
import numpy as np

def get_n_by_n_chi_distance_table(df):

    chi_distance_df = pd.DataFrame(columns = df.index, index = df.index).fillna(0)
    df_temp = df.T
    cols = df_temp.columns

    for col in cols:
        cols = cols.drop(col)
        for col_next in cols:
            input_df = df_temp[[col,col_next]]#.values
            input_df = input_df.loc[(input_df != 0).any(axis=1),:]
            chi_distance_df.loc[col,col_next] = self.get_distance(input_df.values)


    return chi_distance_df

def get_distance(obs):
    return np.sqrt(chi2_contingency(obs.T)[0])
...