簡體   English   中英

計算2行向量的cos相似度,並非全部成對cdists

[英]computing cos similarity of 2 row vectors, not all pairwise cdists

我有兩個熊貓df觸發器和動作,其中包含寫在行中的25維特征向量,並且希望對應行之間的余弦相似度。 下面的代碼生成成對的余弦相似度的20675 x 20675矩陣:

trigger.shape
(20675, 25)
action.shape
(20675, 25)
from scipy.spatial.distance import cdist
result = cdist(trigger, action, metric='cosine')
result.shape
(20675, 20675)

我想最后得到一個形狀為20675 x 1的結果矩陣,其中每一行是觸發器和動作的相應行向量之間的余弦相似度。

我已經搜索過,找不到解決方法。

您可以自己計算余弦相似度。

from scipy import lingalg
cosineSim1 = 1 - np.sum(a * b, axis=-1)/(linalg.norm(a,axis=-1) * linalg.norm(b,axis=-1))

測試是否獲得正確的值:

from scipy import spatial
cosineSim2 = []
for row_a, row_b in zip(a,b):
    cosineSim2.append(spatial.distance.cosine(row_a, row_b))
np.allclose(cosineSim1, cosineSim2). # Should output True

計時測試:

timeit.timeit(func1, number=100)   # computes cosineSim1
0.006364107131958008

timeit.timeit(func2, number=100)  # computes cosineSim2
0.34532594680786133

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM