python 如何从 scipy 压缩距离矩阵中得到合适的距离值

python how to get proper distance value out of scipy condensed distance matrix

我正在使用 python 2.7 和 scipy 来计算数组的距离矩阵。

我不知道如何在返回的压缩矩阵中找到所需的距离值。

查看示例

from scipy.spatial.distance import pdist
import numpy as np

a = np.array([[1],[4],[0],[5]])
print a
print pdist(a)

将打印

[ 3.  1.  4.  4.  1.  5.]

我发现 here 压缩矩阵中的 ij 条目应该存储 i 和 j 条目之间的距离,其中 ithread 想知道它们是将 ij 表示为 i*j 还是 str.join(i, j) 例如 1,2 -> 2 或 12。

我找不到一致的方法来了解所需的索引。

参见我的示例,如果第一个选项有效,您应该期望从条目 0 到其他任何地方的所有距离都将存储在条目 0 中。

任何人都可以阐明我如何提取从条目 x 到条目 y 的所需距离吗?我在寻找哪个索引?

谢谢!

此矢量为压缩形式。它以自然顺序枚举所有索引对(在您的示例中 0,1 0,2 0,3 0,4 1,2 1,3 1,4 2,3 2,4 ) 并生成这些数组条目处的元素之间的距离。

还有squareform函数,可以将压缩形式转化为方阵形式(反之亦然)。方阵形式正是您所期望的,即在第 ij 个条目(第 i 行,第 j 列)处,它存储第 i 个和第 j 个条目之间的距离。例如,如果您在代码末尾添加 print squareform(d),则输出将为:

array([[ 0.,  3.,  1.,  4.],
       [ 3.,  0.,  4.,  1.],
       [ 1.,  4.,  0.,  5.],
       [ 4.,  1.,  5.,  0.]])