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

add*_*ons 1 python numpy vector cosine-similarity

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

1,23,2,5,6,2,2,6,2,
12,4,5,5,
1,2,4,
1,
2,
2
:
Run Code Online (Sandbox Code Playgroud)

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

Ori*_*eto 5

如果两个数组具有相同的维度,我会使用 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)
Run Code Online (Sandbox Code Playgroud)

这里的结果是dist = 1.10e-16(即0)。

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