.. testcode::
import collections
+ import functools
import math
import operator
import random
# convolve(data, [1, -2, 1]) --> 2nd finite difference (2nd derivative)
kernel = tuple(kernel)[::-1]
n = len(kernel)
- padded_signal = chain(repeat(0, n-1), signal, [0] * (n-1))
+ padded_signal = chain(repeat(0, n-1), signal, repeat(0, n-1))
for window in sliding_window(padded_signal, n):
yield math.sumprod(kernel, window)
(x - 5) (x + 4) (x - 3) expands to: x³ -4x² -17x + 60
"""
# polynomial_from_roots([5, -4, 3]) --> [1, -4, -17, 60]
- expansion = [1]
- for r in roots:
- expansion = convolve(expansion, (1, -r))
- return list(expansion)
+ factors = zip(repeat(1), map(operator.neg, roots))
+ return list(functools.reduce(convolve, factors, [1]))
def polynomial_eval(coefficients, x):
"""Evaluate a polynomial at a specific value.