Как я уже сказал в своем комментарии, я не думаю, что у вас будет намного лучше скорость по сравнению с math.sqrt
в нативном питоне, учитывая его связь с C
функцией sqrt
.Тем не менее, ваш вопрос указывает на то, что вам нужно выполнить много «вычислений Пифагора».Я предполагаю, что вы имеете в виду, что у вас много треугольников со сторонами a
и b
, и вы хотите найти значение c для всех из них.Если это так, следующее будет достаточно быстро для вас.Это использует vectorization
с numpy
:
import numpy as np
all_as = ... # python list of all of your a values
all_bs = ... # python list of all of your b values
cs = np.sqrt(np.array(all_as)**2 + np.array(all_bs)**2).tolist()
, если ваш вариант использования отличается, то, пожалуйста, обновите ваш вопрос с типом данных, которые вы имеете, и какую операцию вы хотите,
Однако, если вам действительно нужна реализация быстрого квадратного корня на python, вы можете использовать метод Ньютона` , чтобы сделать это:
def fast_sqrt(y, tolerance=0.05)
prev = -1.0
x = 1.0
while abs(x - prev) > tolerance: # within range
prev = x
x = x - (x * x - y) / (2 * x)
return x
Однако дажес очень высокой терпимостью (0.5
абсурд), вы, скорее всего, не победите math.sqrt
.Хотя у меня нет эталонных тестов, подтверждающих это :) - но я могу сделать их для вас (или вы тоже можете!)