计算两个数组之间的余弦相似度并将结果保存在矩阵中

问题描述 投票:0回答:2

我有两个数组,A (size = (20, 200) 和 B (size = (15, 200))。我想构造一个矩阵 C (size = (20, 15)) s.t c[i,j]存储元素 A[i] 和 B[j] 之间的余弦相似度。

我可以使用循环来做到这一点,但如果 A 和 B 是大数组,则需要很长时间。

python cosine-similarity
2个回答
1
投票

numpy 的矢量化方式是:

import numpy as np


A = np.random.uniform(size=(20, 200))
B = np.random.uniform(size=(15, 200))

normalized_A = A / np.linalg.norm(A, axis=1)[:, np.newaxis]
normalized_B = B / np.linalg.norm(B, axis=1)[:, np.newaxis]
cosine = (normalized_A[:, np.newaxis, :] * normalized_B[np.newaxis, :, :]).sum(axis=2)

# cosine.shape
# > (20, 15)

0
投票

您可以使用 scipy.spatial.distance.cosine 函数来计算两个数组之间的余弦相似度:

import numpy as np 
from scipy.spatial.distance import cosine 
A = np.random.rand(20, 200) 
B = np.random.rand(15, 200) 
C = np.zeros((20, 15)) 
for i in range(20): 
    for j in range(15): 
        C[i, j] = cosine(A[i], B[j])
© www.soinside.com 2019 - 2024. All rights reserved.