计算两个相同形状矩阵的行之间的余弦相似度的最快方法是什么

特伦斯·JY

例如,我有两个二维数组,如下所示:

X = array([[4, 4, 4, 2],
   [3, 1, 2, 2],
   [1, 3, 3, 3],
   [1, 3, 1, 2]])
Y = array([[2, 1, 1, 4],
   [2, 1, 1, 1],
   [4, 1, 4, 4],
   [4, 2, 3, 4]])

我想计算 X 和 Y 行之间的余弦相似度。例如

def cos(feats1, feats2):
    """
    Computing cosine distance
    For similarity
    """
    cos = np.dot(feats1, feats2) / (np.linalg.norm(feats1) * np.linalg.norm(feats2))
    return cos

for i in range(a.shape[0]):
    print(cos(a[i,:],b[i,:]))

现在,我正在使用 for 循环来计算向量之间的 cos 距离。但是 X 和 Y 的大小就像 (1200000000, 512),仅使用 for 循环计算需要很长时间。

我的问题是如何利用代数和 numpy 的力量来加速这个过程。

或者可以更有效地执行此计算的任何其他方法。

谢谢

亚瑟布里克

可能在一行中:诀窍是只指定执行规范和点积的轴。

X = np.random.randn(3,2)
Y = np.random.randn(3,2)
(X * Y).sum(axis=1) / np.linalg.norm(X, axis=1) / np.linalg.norm(Y, axis=1)

第一部分,(X * Y).sum(axis=1)负责计算点积。axis=1指定我们在列上执行点积,即为每一行(数据点)获取一个结果。

第二部分使用相同的方法简单地计算每个向量的范数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

给定稀疏矩阵数据,Python中最快的计算余弦相似度的方法是什么?

给定稀疏矩阵数据,Python中最快的计算余弦相似度的方法是什么?

如何计算两个张量之间的余弦相似度?

计算Keras中两个张量之间的余弦相似度

计算 lambda 层中两个张量向量之间的余弦相似度?

如何计算两个向量的余弦相似度?

计算R中两个单词的余弦相似度?

合并两个 CountVectorizers 并计算余弦相似度

列表中两个词之间的余弦相似度

计算两个数组之间的余弦相似度的正确方法?

我有两个公式计算“余弦相似度”,有什么区别?

如何编写一个返回两个文档之间余弦相似度的方法

用Python(和Cython)计算两个矩阵的点积最快的方法是什么

在R中两个瘦高个矩阵之间计算按行点积的最快方法

计算两个uint8_t变量之间的差异的最快方法是什么?

用Python计算两个图像之间的绝对差之和的最快方法是什么?

Python中两个不同形状的数组的余弦距离是如何计算的?

计算列表的两个字典之间相似度的最有效方法是什么?

如何计算两个字符串向量之间的余弦相似度

有什么办法,以加快在Java中两个双阵列之间的余弦相似的这个计算?

在具有相同形状的两个列表中查找相似的实例

有效地计算向量形状 (768,) 和矩阵 (n, 768) 之间的余弦相似度

如何计算PySpark中两个向量的余弦相似度?

如何调试这段代码计算两个unicode文件的余弦相似度?

计算两个向量之间的相似度

Python:两个大型numpy数组之间的余弦相似度

Quanteda:按两个DFM之间的行计算文本相似度

两个大文件的平行余弦相似度

从R中的两个向量生成这种矩阵的最快方法是什么?