从 scipy.pdist(myArray,metric="jaccard") 获取结果索引以映射回原始数组?

Get indices of results from scipy.pdist(myArray,metric="jaccard") to map back to original array?

我正在尝试计算 jaccard 相似度

y= 1 - scipy.spatial.distance.pdist(X,metric="jaccard")

X 是一个 m x n 矩阵,作为此函数的结果,我得到了一个大小为 m choose 2 的一维数组。我如何将相似性值映射回以获得对称数组或(非对称数组两种方式都很好)所以我可以分辨出 X 中的哪两个向量(X 中的每一行都是布尔向量)生成了特定的 jaccard 相似性值在 y?

您可以使用 scipy.spatial.distance.squareform 在完整的 m x n 距离矩阵和上三角之间进行转换:

import numpy as np
from scipy.spatial import distance

m = 100
n = 200
X = np.random.randn(m, n)

d = distance.pdist(X, metric='jaccard')
print(d.shape)
# (4950,)

D = distance.squareform(d)
print D.shape
# (100, 100)

有一个名为 scipy.spatial.distance.squareform(y) 的模块,它将从 scipy.spatial.distance.pdist(X,metric='jaccard') 获得的 压缩形式的一维矩阵 转换为对称矩阵,因此它将是从那里获取索引相对简单。

因此我们可以执行以下操作:

y=1-scipy.spatial.distance.pdist(x,metric='jaccard')
z=scipy.spatial.distance.squareform(y)

X 是一个 m x n 输入矩阵。 这里 y 将是一个 1 x (m choose 2) 维矩阵(压缩距离矩阵) z 将是一个 m x m 对称方阵