Оригинал:
>>> timeit.timeit('distance2((0,1,2),(3,4,5))', '''
... from math import sqrt
... def distance2(x,y):
... return sqrt((x[0]-y[0])*(x[0]-y[0])+(x[1]-y[1])*(x[1]-y[1])+(x[2]-y[2])*(x[2]-y[2]))
... ''')
1.1989610195159912
общего подвыражения:
>>> timeit.timeit('distance((0,1,2),(3,4,5))', '''
... def distance(x,y):
... d1 = x[0] - y[0]
... d2 = x[1] - y[1]
... d3 = x[2] - y[2]
... return (d1 * d1 + d2 * d2 + d3 * d3) ** .5''')
0.93855404853820801
Оптимизированная Распаковка:
>>> timeit.timeit('distance((0,1,2),(3,4,5))', '''
... def distance(x,y):
... x1, x2, x3 = x
... y1, y2, y3 = y
... d1 = x1 - y1
... d2 = x2 - y2
... d3 = x3 - y3
... return (d1 * d1 + d2 * d2 + d3 * d3) ** .5''')
0.90851116180419922
Функция Библиотека:
>>> timeit.timeit('distance((0,1,2),(3,4,5))', '''
... import math
... def distance(x,y):
... x1, x2, x3 = x
... y1, y2, y3 = y
... d1 = x1 - y1
... d2 = x2 - y2
... d3 = x3 - y3
... return math.sqrt(d1 * d1 + d2 * d2 + d3 * d3)
... ''')
0.78318595886230469
Пунктирные:
>>> timeit.timeit('distance((0,1,2),(3,4,5))', '''
... from math import sqrt
... def distance(x,y):
... x1, x2, x3 = x
... y1, y2, y3 = y
... d1 = x1 - y1
... d2 = x2 - y2
... d3 = x3 - y3
... return sqrt(d1 * d1 + d2 * d2 + d3 * d3)
... ''')
0.75629591941833496
Что вы делаете с окончательной дистанцией? Если вы используете его только для сравнения, отбросьте «sqrt» и сравните значение, с которым вы сравниваете. –
Если вы знаете C, я бы использовал этот язык. Известно, что Python является неэффективным математиком. – xxmbabanexx
, если значение x [i] -y [i] повторяется часто, вы можете попробовать кешировать '(x [i] -y [i]) * (x [i] -y [i])' – Octipi