scipy 与给定距离矩阵的链接

scipy linkage with a given distance matrix

我有一个非常大的稀疏矩阵(几百万行,500 列)。 我已经计算了 5000X5000 的距离矩阵。 我需要使用 scipy.cluster.hierarchy.linkage 来根据这个矩阵进行聚类。 我知道 linkage 接受自定义函数,但是再次计算这个距离矩阵非常耗时。
我如何告诉 scipy 使用矩阵的距离? 我试过了

dist = my_dist(X) # numpy array ndim = 2
linkage(X, metric=lambda x: dist[x,y])

但传递的 x,y 是值而不是索引。

您可以将距离矩阵传递给 linkage if you represent it as a "condensed" distance matrix. You can use scipy.spatial.squareform 以将 dist 转换为压缩表示。

像这样:

from scipy.spatial.distance import squareform

dist = my_dist(X)
condensed_dist = squareform(dist)
linkresult = linkage(condensed_dist)