python 欧氏距离_如何用NumPy计算欧氏距离?

对于任何对同时计算多个距离感兴趣的人,我做了一些比较完成图(我的一个小项目)。结果证明a_min_b = a - b

numpy.sqrt(numpy.einsum('ij,ij->i', a_min_b, a_min_b))

中的行的距离。a和b最快的。这实际上也适用于一行!

再现情节的代码:import matplotlibimport numpyimport perfplotfrom scipy.spatial import distancedef linalg_norm(data):

a, b = data    return numpy.linalg.norm(a-b, axis=1)def sqrt_sum(data):

a, b = data    return numpy.sqrt(numpy.sum((a-b)**2, axis=1))def scipy_distance(data):

a, b = data    return list(map(distance.euclidean, a, b))def mpl_dist(data):

a, b = data    return list(map(matplotlib.mlab.dist, a, b))def sqrt_einsum(data):

a, b = data

a_min_b = a - b    return numpy.sqrt(numpy.einsum('ij,ij->i', a_min_b, a_min_b))perfplot.show(

setup=lambda n: numpy.random.rand(2, n, 3),

n_range=[2**k for k in range(20)],

kernels=[linalg_norm, scipy_distance, mpl_dist, sqrt_sum, sqrt_einsum],

logx=True,

logy=True,

xlabel='len(x), len(y)'

)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值