Кажется, вы описываете numpy.polyval()
:
import numpy as np
# 1 * x**2 + 2 * x**1 + 3 * x**0
# computed at points: [0, 1, 2]
y = np.polyval([1, 2, 3], [0, 1, 2])
print(y)
# [ 3 6 11]
Обратите внимание, что того же можно достичь с помощью np.poly1d()
, что должно быть более эффективнымесли вы вычисляете значения из одного и того же полинома несколько раз:
import numpy as np
# 1 * x**2 + 2 * x**1 + 3 * x**0
my_poly_func = np.poly1d([1, 2, 3])
# computed at points: [0, 1, 2]
y = my_poly_func([0, 1, 2])
print(y)
# [ 3 6 11]
Если вы хотите использовать только встроенные модули Python, вы можете легко определить версию polyval()
самостоятельно, например:
def polyval(p, x):
return [sum(p_i * x_i ** i for i, p_i in enumerate(p[::-1])) for x_i in x]
y = polyval([1, 2, 3], [0, 1, 2])
print(y)
# [3, 6, 11]
или, более эффективно:
def polyval_horner(p, x):
y = []
for x_i in x:
y_i = 0
for p_i in p:
y_i = x_i * y_i + p_i
y.append(y_i)
return y
y = polyval_horner([1, 2, 3], [0, 1, 2])
print(y)
# [3, 6, 11]
, но я бы порекомендовал использовать NumPy, если у вас нет веских причин не делать этого (например, если ваш результат будет переполнен NumPy, но не чистымPython).