Python 计算稀疏向量之间的距离
我想计算两个向量之间的余弦(scipy)距离。我最初为每个人提供了一个带有“类别”和值的数据框 我想使用向量计算人与人之间的距离,向量值按类别索引 我可以通过如下方式创建一个透视表来实现这一点:Python 计算稀疏向量之间的距离,python,pandas,Python,Pandas,我想计算两个向量之间的余弦(scipy)距离。我最初为每个人提供了一个带有“类别”和值的数据框 我想使用向量计算人与人之间的距离,向量值按类别索引 我可以通过如下方式创建一个透视表来实现这一点: pivot = df.pivot_table(index=['person'], columns='category', values='value', aggfunc='sum', fill_value=0) index person A B C D E F 0 1
pivot = df.pivot_table(index=['person'], columns='category', values='value', aggfunc='sum', fill_value=0)
index person A B C D E F
0 1 1 1 1 0 0 0
1 2 0 1 0 1 0 0
2 3 0 0 0 0 1 1
3 4 0 0 0 1 0 1
但是,我不想这样做(我正在处理大向量,因此pd.pivot_表可能需要一些时间)
如何使用df中的原始“稀疏”格式执行此操作?尝试以下操作:
In [30]: pd.crosstab(df.person, df.category).reset_index().rename_axis(None, 1)
Out[30]:
person A B C D E F
0 1 1 1 1 0 0 0
1 2 0 1 0 1 0 0
2 3 0 0 0 0 1 1
3 4 0 0 0 1 0 1
从何处以及如何加载数据?原始数据来自csv或txr文件,因此我使用pd.read\u csv创建原始数据帧。您可以提供一个具有稀疏数据类型列的可复制样本吗?您的数据来自csv文件。很可能加载过程中最慢的部分就是从这种低效的格式加载数据。如果是我,我会在加载时进行转换。@MaxU也许我不应该说我有一个“稀疏向量”。我所拥有的就是我在df中展示的。
In [30]: pd.crosstab(df.person, df.category).reset_index().rename_axis(None, 1)
Out[30]:
person A B C D E F
0 1 1 1 1 0 0 0
1 2 0 1 0 1 0 0
2 3 0 0 0 0 1 1
3 4 0 0 0 1 0 1