a, b = randn(10, 2), randn(10, 2)
ahat, bhat = (a - b).T
r = hypot(ahat, bhat)
手动计算和hypot之间的timeit s结果: 说明书:
timeit sqrt(((a - b) ** 2).sum(-1))
100000 loops, best of 3: 10.3 µs per loop
使用hypot:
timeit hypot(ahat, bhat)
1000000 loops, best of 3: 1.3 µs per loop
现在来看看一些成人大小的数组:
a, b = randn(1e7, 2), randn(1e7, 2)
ahat, bhat = (a - b).T
timeit -r10 -n3 hypot(ahat, bhat)
3 loops, best of 10: 208 ms per loop
timeit -r10 -n3 sqrt(((a - b) ** 2).sum(-1))
3 loops, best of 10: 224 ms per loop
这两种方法之间的性能差别不大。你可以通过避免使用pow来从后者中挤出一点点:
d = a - b
timeit -r10 -n3 sqrt((d * d).sum(-1))
3 loops, best of 10: 184 ms per loop
3条答案
按热度按时间pbossiut1#
我没有看到一个内置的,但你可以做自己很容易。
bvk5enib2#
hypot
是另一个有效的替代方案手动计算和
hypot
之间的timeit
s结果:说明书:
使用
hypot
:现在来看看一些成人大小的数组:
这两种方法之间的性能差别不大。你可以通过避免使用
pow
来从后者中挤出一点点:blmhpbnm3#
尝试将
[:, np.newaxis, :]
添加到第一个参数ref Numpy Broadcast to perform euclidean distance vectorized