[Python-checkins] Add convolve() to the itertools recipes (GH-23928) (GH-23949)
rhettinger
webhook-mailer at python.org
Fri Dec 25 23:23:43 EST 2020
https://github.com/python/cpython/commit/ed48e9e2862971c2e9dcbd9a253477ec3def5e2e
commit: ed48e9e2862971c2e9dcbd9a253477ec3def5e2e
branch: 3.9
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: rhettinger <rhettinger at users.noreply.github.com>
date: 2020-12-25T20:23:35-08:00
summary:
Add convolve() to the itertools recipes (GH-23928) (GH-23949)
files:
M Doc/library/itertools.rst
diff --git a/Doc/library/itertools.rst b/Doc/library/itertools.rst
index 85f4928ce84fb..ff5b60d70ff4e 100644
--- a/Doc/library/itertools.rst
+++ b/Doc/library/itertools.rst
@@ -769,6 +769,18 @@ which incur interpreter overhead.
def dotproduct(vec1, vec2):
return sum(map(operator.mul, vec1, vec2))
+ def convolve(signal, kernel):
+ # See: https://betterexplained.com/articles/intuitive-convolution/
+ # convolve(data, [0.25, 0.25, 0.25, 0.25]) --> Moving average (blur)
+ # convolve(data, [1, -1]) --> 1st finite difference (1st derivative)
+ # convolve(data, [1, -2, 1]) --> 2nd finite difference (2nd derivative)
+ kernel = list(reversed(kernel))
+ n = len(kernel)
+ window = collections.deque([0] * n, maxlen=n)
+ for x in chain(signal, repeat(0, n-1)):
+ window.append(x)
+ yield sum(map(operator.mul, kernel, window))
+
def flatten(list_of_lists):
"Flatten one level of nesting"
return chain.from_iterable(list_of_lists)
More information about the Python-checkins
mailing list