Интерполяция в SciPy: Нахождение X, который производит Y

То, что в предоставленном ответе не хватает imo, так это то, что в большинстве случаев они используются вместо 1 или другого, что, по-видимому, является тоном предоставленного ответа / вопроса.

Событие - это нечто значимое в вашем приложении. Давайте предположим, что ваше приложение является интернет-магазином.

Значительным действием в вашем интернет-магазине может быть Покупка товара . Когда продукт приобретен, вам нужно сделать много разных шагов. Помещение всего этого в контроллер и, возможно, в нескольких разных местах может стать очень грязным и неясным.

Поэтому хорошим подходом было бы использовать Событие с именем ProductPurchased . У этого события могут быть Слушатели, эти слушатели в этом случае выполняют все шаги, которые необходимо выполнить, когда пользователь покупает продукт.

Например: ProductPurchased (событие)

  • BillClient (Eventlistener)
  • GenerateInvoice (Eventlistener)
  • notifyClient (Eventlistener)
  • .. .

Допустим, мы хотим уведомить нашего клиента с помощью текстового сообщения и электронного письма, когда они купили продукт.

Итак, на слушателе событий notifyClient мы можем создать Уведомление . Это уведомление отвечает за отправку сообщения клиенту. Это может быть SMS / Slack-message / Email / ...

И, как вы упомянули, события и уведомления могут быть помещены в очередь или могут быть переданы.

13
задан JcMaco 23 June 2009 в 11:01
поделиться

3 ответа

Класс UnivariateSpline в scipy делает построение сплайнов более питоническим.

x = [70, 80, 90, 100, 110]
y = [49.7, 80.6, 122.5, 153.8, 163.0]
f = interpolate.UnivariateSpline(x, y, s=0)
xnew = np.arange(70,111,1)

plt.plot(x,y,'x',xnew,f(xnew))

Чтобы найти x в y, сделайте следующее:

yToFind = 140
yreduced = np.array(y) - yToFind
freduced = interpolate.UnivariateSpline(x, yreduced, s=0)
freduced.roots()

Я думал, что интерполяция x в терминах y может сработать, но для этого требуется несколько другой маршрут. Это могло быть ближе с большим количеством очков.

18
ответ дан 1 December 2019 в 22:58
поделиться

Если все, что вам нужно, это линейной интерполяции, вы можете использовать функцию interp в numpy.

2
ответ дан 1 December 2019 в 22:58
поделиться

Возможно, я неправильно понял ваш вопрос, извините. Я не думаю, что вам нужно использовать SciPy. NumPy имеет функцию наименьших квадратов.

#!/usr/bin/env python

from numpy.linalg.linalg import lstsq



def find_coefficients(data, exponents):
    X = tuple((tuple((pow(x,p) for p in exponents)) for (x,y) in data))
    y = tuple(((y) for (x,y) in data))
    x, resids, rank, s = lstsq(X,y)
    return x

if __name__ == "__main__":
    data = tuple((
        (1.47, 52.21),
        (1.50, 53.12),
        (1.52, 54.48),
        (1.55, 55.84),
        (1.57, 57.20),
        (1.60, 58.57),
        (1.63, 59.93),
        (1.65, 61.29),
        (1.68, 63.11),
        (1.70, 64.47),
        (1.73, 66.28),
        (1.75, 68.10),
        (1.78, 69.92),
        (1.80, 72.19),
        (1.83, 74.46)
    ))
    print find_coefficients(data, range(3))

Это вернет [128.81280358 -143.16202286 61.96032544].

>>> x=1.47 # the first of the input data
>>> 128.81280358 + -143.16202286*x + 61.96032544*(x**2)
52.254697219095988

0,04 на выходе, неплохо

0
ответ дан 1 December 2019 в 22:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: