使用Python中的pdist()函数,结合自定义的距离函数进行计算。

12

我一直对Python中的scipy.spatial.distance.pdist(...) 函数的使用非常感兴趣,因为它对我正在进行的某些应用程序来说非常有用且速度快。

我需要使用自定义的成对距离函数,而不是由metric定义的标准默认距离度量标准。让我们举个简单的例子,假设我不想使用euclidean距离函数,如下所示:

 Y = pdist(X, 'euclidean')

我希望自己定义欧几里得函数,并将其作为函数或参数传递给 pdist()。如何传递 euclidean距离函数的实现以获得完全相同的结果?这个问题的答案将帮助我以我感兴趣的方式使用该函数。

在MATLAB中,我知道如何使用pdist(),但在Python中还不知道。谢谢您的建议。

1个回答

20

pdist的文档中有一个例子:

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

dm = pdist(X, lambda u, v: np.sqrt(((u-v)**2).sum()))

如果您想使用一个常规函数而不是 lambda 函数,则相当的函数是

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

def dfun(u, v):
    return np.sqrt(((u-v)**2).sum())

dm = pdist(X, dfun)

如何在seaborn的层次聚类函数sns.clustermap(X, metric=dm)中使用新的距离度量?当$X$是一个方阵时,尝试这样做会产生错误。 - develarist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接