У меня очень медленный цикл, с которым я мог бы помочь. У меня есть пандас 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])