python - 运行 scipy.spatial.distance.pdist 后提取距离

标签 python pandas similarity euclidean-distance

我有一个 Pandas 数据框(请参见下面的小示例)。我想根据 3 列(特征)中的值计算观测值(行)之间的欧几里德距离。我正在使用 scipy.spatial.distance.pdist。

据我了解,返回的对象 (dist) 包含我的 20 个观察值(行)之间的 190 个距离。我假设,它是一个“展开”的三角形矩阵 - 第一行和第二行之间的距离,然后可能是第一行和第三行之间的距离,...第一行和第二十行之间的距离,然后是第二行和第三行之间的距离,第二行和第二行之间的距离第四,依此类推

但是,我不确定。并且:如何构建一个包含距离的对称 20 x 20 矩阵?

我的最终目标: 对于每个观察(行),我想找到它最近的 5 个邻居(即与其距离最小的行)并对这 5 个距离求和。如果我有一个方阵,我可以对每一列应用一个函数。但现在我不知道如何处理“dist”。

非常感谢您的帮助!

import numpy as np
import pandas as pd
# Generate fake Pandas data frame
a = pd.Series(np.random.normal(1, 0.1, 20))
df = pd.DataFrame(a, columns=['a'])
df['b'] = pd.Series(np.random.normal(2, 0.1, 20))
df['c'] = pd.Series(np.random.normal(3, 0.1, 20))
import scipy
dist = scipy.spatial.distance.pdist(df, metric='euclidean')

dist.shape # (190,)

最佳答案

您可以将 dist 传递给 scipy.spatial.distance.squareform。它将 n×1 成对距离数组转换为方阵形式。

d_matrix = scipy.spatial.distance.squareform(dist)

关于python - 运行 scipy.spatial.distance.pdist 后提取距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47087087/

相关文章:

python - 何时、为何以及如何在 Python 中调用 thread.join()?

python - F1 分数指标和分类报告 sklearn 的 F1 分数值不同

python - 计算 Pandas 滚动交叉点的大小

machine-learning - 我们可以使用多少种距离函数?

machine-learning - MahoutRecommenditembased 中相似性策略之间的差异

algorithm - 比较两个词的相似度

python - 如何将 float32 解释为 numpy 中的四个 uint8?

python - 将日期时间字符串快速转换为秒 (Python3)

python - 在 pandas MultiIndex DataFrame 中按级别对列求和

python - 比较 pandas 中的小数列值时出现问题