gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:26:57 27 4
gpt4 key购买 nike

我有一个 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com