gpt4 book ai didi

python - 两个矩阵之间的余弦距离

转载 作者:太空宇宙 更新时间:2023-11-04 05:43:19 24 4
gpt4 key购买 nike

分别取两个矩阵arr1、arr2,大小分别为mxn和pxn。我试图找到他们尊重的行的余弦距离作为 mxp 矩阵。本质上,我想取行的成对点积,然后除以每行范数的外积。

import numpy as np
def cosine_distance(arr1, arr2):
numerator = np.dot(arr1, arr2.T)
denominator = np.outer(
np.sqrt(np.square(arr1).sum(1)),
np.sqrt(np.square(arr2).sum(1)))
return np.nan_to_num(np.divide(numerator, denominator))

我认为这应该返回一个 mxn 矩阵,其中包含 [-1.0, 1.0] 中的条目,但出于某种原因,我正在获取该间隔之外的值。我在想我的这些 numpy 函数之一正在做一些与我认为的不同的事情。

最佳答案

听起来您需要除以向量数组的 L2 范数的外积:

arr1.dot(arr2.T) / np.outer(np.linalg.norm(arr1, axis=1),
np.linalg.norm(arr2, axis=1))

例如

In [4]: arr1 = np.array([[1., -2., 3.],
[0., 0.5, 2.],
[-1., 1.5, 1.5],
[2., -0.5, 0.]])

In [5]: arr2 = np.array([[0., -3., 1.],
[1.5, 0.25, 1.]])

In [6]: arr1.dot(arr2.T)/np.outer(np.linalg.norm(arr1, axis=1),
np.linalg.norm(arr2, axis=1))
Out[6]:
array([[ 0.76063883, 0.58737848],
[ 0.0766965 , 0.56635211],
[-0.40451992, 0.08785611],
[ 0.2300895 , 0.7662411 ]])

关于python - 两个矩阵之间的余弦距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33160949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com