例如,我有两个二维数组,如下所示:
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] 删除。
我来说两句