我有一个双重循环耗时比较多,主要可能在检查 index 上面:
from scipy.stats import pearsonr
# X,Y 是一个字典,每一个 key 对应一个序列 pandas.Series , 序列的元素是 float
# 难点:序列的 index 可能不一致,比如 X[k1] 这个序列的 index 是 0 到 100 ,
# Y[k2] 这个序列的 index 是 30 到 130 , X[k1] 和 Y[k2] 这两个序列里面可能有 nan 值。
# 要求:取出 X[k1] 和 Y[k2] 这两个序列中索引相同的,且不含 nan 值的部分,做相关系数
result = np.empty((len(X),len(y)))
for kx in X.keys():
for ky in Y.keys():
df = pd.DataFrame({'col1':X[kx], 'col2':Y[ky]}).dropna() # 耗时几乎都在这上面了
result[kx,ky] = pearsonr(df.col1, df.col2)
真正的 pearsonr 并不耗费多少时间,请教该如何优化是好?