0

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

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

查看示例

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.]

我在这里发现压缩矩阵中的 ij 条目应该存储 i 和 j 条目之间的距离,其中 ithread 想知道它们是否意味着 ij 为 i*j 或 str.join(i,j) 例如 1,2 -> 2 或 12 .

我找不到一致的方法来了解想要的索引。

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

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

谢谢!

4

1 回答 1

2

这个向量是压缩形式的。它以自然顺序(在您的示例中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.]])
于 2017-06-05T08:11:37.610 回答