From 7dd38155015ef398115a9eaf734f5ae26574494c Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Wed, 30 Dec 2020 12:07:30 -0800 Subject: [PATCH 1/2] Minor improvement to speed and space efficiency for the convolve() recipe --- Doc/library/itertools.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Doc/library/itertools.rst b/Doc/library/itertools.rst index 03416a0a7fbcb8..2343de360adc79 100644 --- a/Doc/library/itertools.rst +++ b/Doc/library/itertools.rst @@ -793,7 +793,7 @@ which incur interpreter overhead. # convolve(data, [1, -2, 1]) --> 2nd finite difference (2nd derivative) kernel = list(reversed(kernel)) n = len(kernel) - window = collections.deque([0] * n, maxlen=n) + window = collections.deque([0], maxlen=n) * n for x in chain(signal, repeat(0, n-1)): window.append(x) yield sum(map(operator.mul, kernel, window)) From 1f1b2455f5c3f46c5c484ac568ec5dea9e659202 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Wed, 30 Dec 2020 12:12:32 -0800 Subject: [PATCH 2/2] Don't require convolve's kernel to be a sequence. --- Doc/library/itertools.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Doc/library/itertools.rst b/Doc/library/itertools.rst index 2343de360adc79..fd77f99a88f577 100644 --- a/Doc/library/itertools.rst +++ b/Doc/library/itertools.rst @@ -791,7 +791,7 @@ which incur interpreter overhead. # 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)) + kernel = tuple(kernel)[::-1] n = len(kernel) window = collections.deque([0], maxlen=n) * n for x in chain(signal, repeat(0, n-1)):