【发布时间】:2014-09-24 11:18:36
【问题描述】:
我想使用 Pearson 相关距离构建一个距离矩阵。
我首先尝试了scipy.spatial.distance.pdist(df,'correlation'),这对于我的 5000 行 * 20 个特征数据集来说非常快。
由于我想建立一个推荐器,我想稍微改变距离,只考虑对两个用户来说 NaN 不同的特征。事实上,scipy.spatial.distance.pdist(df,'correlation') 遇到任何值为 float('nan') 的特征时,都会输出 NaN。
这是我的代码,df 是我的 5000*20 pandas DataFrame
dist_mat = []
d = df.shape[1]
for i,row_i in enumerate(df.itertuples()):
for j,row_j in enumerate(df.itertuples()):
if i<j:
print(i,j)
ind = [False if (math.isnan(row_i[t+1]) or math.isnan(row_j[t+1])) else True for t in range(d)]
dist_mat.append(scipy.spatial.distance.correlation([row_i[t] for t in ind],[row_j[t] for t in ind]))
此代码有效,但与scipy.spatial.distance.pdist(df,'correlation') 相比,它的速度非常慢。我的问题是:如何改进我的代码以使其运行得更快?或者我在哪里可以找到一个计算两个向量之间相关性的库,它只考虑两个向量中出现的特征?
感谢您的回答。
【问题讨论】:
标签: python matrix pandas distance correlation