мне нужно вычислить координаты и радиус окружности методом наименьших квадратов, для этого я написал функцию, которая принимает в качестве аргументов два списка с координатами дугиокружности Х и У, а возвращает координаты центра окружности и её радиус. всё работает правильно и хорошо, но слишком медленно, при попытке ускорения с помощью numba припост скорости получился существенный, но результаты оказываются не верные
@numba.njit()
def MNK_circle(x,y):
n = len(x)
x_kv = np.square(x)
y_kv = np.square(y)
sum_x_kv = int(np.sum(x_kv))
sum_y_kv = int(np.sum(y_kv))
sum_x = int(np.sum(x))
sum_y = int(np.sum(y))
sum_x_kub = int(np.sum(np.power(x, 3)))
sum_y_kub = int(np.sum(np.power(y, 3)))
sum_xy = int(np.sum(x * y))
sum_x_y_kv = int(np.sum(x * y_kv))
sum_y_x_kv = int(np.sum(y * x_kv))
N11 = 2*(sum_x_kv-(sum_x*sum_x)/n)
N12 = 2*(sum_xy-(sum_x*sum_y)/n)
W1 = sum_x_kub+sum_x_y_kv-((sum_x_kv*sum_x)/n)-((sum_y_kv*sum_x)/n)
N21 = 2*(sum_xy-((sum_x*sum_y)/n))
N22 = 2*(sum_y_kv-((sum_y*sum_y)/n))
W2 = sum_y_x_kv+sum_y_kub-((sum_x_kv*sum_y)/n)-((sum_y_kv * sum_y)/n)
detN = N11*N22 - N12*N21
x0 = (W1*N22-W2*N12)/detN
y0 = (W2*N11-W1*N21)/detN
r = math.sqrt(x0*x0 + y0*y0 + (sum_x_kv + sum_y_kv - 2*(x0*sum_x+y0*sum_y))/n)
return int(x0+0.5), int(y0+0.5), int(r+0.5)
предполагаю что проблемы вызваны использованием numpy массивов, что то мне кажется что в них происходит переполнение, но почему без numba всё работает