2015-02-09 41 views
0

我試圖計算Jaccard相似獲取來自scipy.pdist(myArray,metric =「jaccard」)的結果索引以映射回原始數組?

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

X是m x n矩陣和我得到尺寸m choose 2的1-d陣列這個函數的結果。我如何將相似度值映射回來以獲得對稱數組或者(非對稱數組,無論哪種方式都很好),所以我可以告訴X中的哪兩個向量(X中的每一行是布爾向量)都會生成特定的jaccard相似度值在y?

回答

2

可以使用scipy.spatial.distance.squareform到全MXN距離矩陣和上三角之間進行轉換:

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) 
+0

哈哈,我沒有看到這個遺憾。感謝您的幫助寫得非常好。 – anonuser0428 2015-02-09 17:11:03

0

有一個名爲scipy.spatial.distance.squareform(y)模塊,其中,它從獲得的濃縮形式1-d矩陣轉換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方形對稱矩陣