Skip to main content
 首页 » 编程设计

Python:余弦相似度 m * n 矩阵

2025年05月04日15Renyi-Fan

我有两个 M X N 矩阵,它们是在从图像中提取数据后构建的。这两个向量的第一行都很长,在第三行之后它们都变成了第一列。 例如原始向量看起来像这样

1,23,2,5,6,2,2,6,2, 
12,4,5,5, 
1,2,4, 
1, 
2, 
2 
: 

两个向量都有相似的模式,前三行有很长的行,然后随着它的进展而变薄。做余弦相似度我正在考虑使用填充技术来添加零并使这两个向量成为 N X N。我查看了余弦相似度的 Python 选项,但一些示例使用了一个包调用 numpy。我无法弄清楚 numpy 究竟是如何进行这种填充并执行余弦相似度的。任何指导将不胜感激。

请您参考如下方法:

如果两个数组具有相同的维度,我会使用 NumPy 将它们展平。 NumPy(和 SciPy)是一种强大的科学计算工具,可以让矩阵操作变得更加容易。

这里是我将如何使用 NumPy 和 SciPy 进行操作的示例:

import numpy as np 
from scipy.spatial import distance 
 
A = np.array([[1,23,2,5,6,2,2,6,2],[12,4,5,5],[1,2,4],[1],[2],[2]], dtype=object ) 
B = np.array([[1,23,2,5,6,2,2,6,2],[12,4,5,5],[1,2,4],[1],[2],[2]], dtype=object ) 
 
Aflat = np.hstack(A) 
Bflat = np.hstack(B) 
 
dist = distance.cosine(Aflat, Bflat) 

此处的结果是 dist = 1.10e-16(即 0)。

请注意,我在这里使用了 dtype=object,因为这是我所知道的能够将不同形状存储到 NumPy 数组中的唯一方法。这就是为什么后来我使用 hstack() 来展平数组(而不是使用更常见的 flatten() 函数)。