Pull to refresh

Comments 9

Спасибо, долго искал решение задачи, и получил грамотно составленный ответ на него! Удачи в работе
Что-то мне подсказывает, что эта задача метода наименьших квадратов решается для обобщенного полинома более-менее легко и непринужденно.
В питоне принято вместо
s1=sum([1/x[i] for i in  range(0,n)])

писать
s1 = sum(1 / value for value in x)

Но ещё лучше использовать numpy:
import numpy as np
x, y = np.array(x), np.array(y)
s1 = np.sum(1 / x)
s2 = np.sum(1 / y)
s3 = np.sum(y / x)
...

Для этого в Python есть модуль scipy, но он не поддерживает отрицательную степень d полинома. Рассмотрим код реализации аппроксимации данных полиномом.

Не обязательно использовать линейный метод наименьших квадратов. Можно и нелинейный использовать, который, правда, уже так просто не реализуешь. Но функция же есть! :)


from scipy.optimize import curve_fit

def f(x, a, b):
    return a + b/x

x=[10, 14, 18, 22, 26, 30, 34, 38, 42, 46, 50, 54, 58, 62, 66, 70, 74, 78, 82, 86]

y=[0.1, 0.0714, 0.0556, 0.0455, 0.0385, 0.0333, 0.0294, 0.0263, 0.0238, 0.0217, 0.02, 0.0185, 0.0172, 0.0161, 0.0152, 0.0143, 0.0135, 0.0128, 0.0122, 0.0116]

popt, _ = curve_fit(f, x, y)

fit_y = [f(xi, popt[0], popt[1]) for xi in x]

import matplotlib.pyplot as plt
plt.plot(x, y, 'o', x, fit_y, '-')

Скрытый текст
А как питон в плане производительности при больших объёмах данных?
Такой же как и любой интерпретируемый язык — если удается сводить обработку к редким (относительно) вызовам сишных функций, то все хорошо, в противном случае — не очень
Вполне себе отлично, даже на вполне себе риалтайме уровня 15 000 000 событий в секунду, доставляемые Kafka в предсказательную модель на временных рядах.
Но кто-то и Hadoop разворачивает для поиска буковок в 15 Гб данных, где отлично справляется grep.
Ну у меня следующая проблема: порой нужны фиты для набора в 100к точек и более. Ваять код на С было не очень удобно, я решил воспользоваться гнуплотом. Работает отлично, но функционал ограничен. Вот я и думаю: если питон будет это делать так же быстро (порядка нескольких секунд), то быть может стоит попробовать?

numpy и scipy написаны на C и Fortran, всё работает довольно быстро, поищите бенчмарки в сети.
Если данные обрабатывать на чистом питоне, можно накрутить JIT в виде numba-декораторов. Смотрите инфу по пакету numba.

Sign up to leave a comment.

Articles