python数组如果余弦_两数组间余弦距离的计算Python

方法1:我们可以简单地使用^{}及其{}距离功能-from scipy.spatial.distance import cdist

val_out = 1 - cdist(array1, array2, 'cosine')

方法2:另一种使用^{}-

^{pr2}$

方法3:使用^{}计算另一个的自平方和-def cosine_vectorized_v2(array1, array2):

sumyy = np.einsum('ij,ij->i',array2,array2)

sumxx = np.einsum('ij,ij->i',array1,array1)[:,None]

sumxy = array1.dot(array2.T)

return (sumxy/np.sqrt(sumxx))/np.sqrt(sumyy)

方法4:引入^{} module来卸载另一个方法的square-root计算-import numexpr as ne

def cosine_vectorized_v3(array1, array2):

sumyy = np.einsum('ij,ij->i',array2,array2)

sumxx = np.einsum('ij,ij->i',array1,array1)[:,None]

sumxy = array1.dot(array2.T)

sqrt_sumxx = ne.evaluate('sqrt(sumxx)')

sqrt_sumyy = ne.evaluate('sqrt(sumyy)')

return ne.evaluate('(sumxy/sqrt_sumxx)/sqrt_sumyy')

运行时测试# Using same sizes as stated in the question

In [185]: array1 = np.random.rand(10000,100)

...: array2 = np.random.rand(5000,100)

...:

In [194]: %timeit 1 - cdist(array1, array2, 'cosine')

1 loops, best of 3: 366 ms per loop

In [195]: %timeit cosine_vectorized(array1, array2)

1 loops, best of 3: 287 ms per loop

In [196]: %timeit cosine_vectorized_v2(array1, array2)

1 loops, best of 3: 283 ms per loop

In [197]: %timeit cosine_vectorized_v3(array1, array2)

1 loops, best of 3: 217 ms per loop

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值