我有一个双重循环耗时比较多,主要可能在检查 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 并不耗费多少时间,请教该如何优化是好?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.