Minor improvements to the convolve() recipe (GH-24012)

* Minor improvement to speed and space efficiency for the convolve() recipe
* Don't require convolve's kernel to be a sequence.
This commit is contained in:
Raymond Hettinger 2020-12-30 12:51:19 -08:00 committed by GitHub
parent 4ac923f275
commit f421bfce80
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 2 additions and 2 deletions

View File

@ -791,9 +791,9 @@ which incur interpreter overhead.
# convolve(data, [0.25, 0.25, 0.25, 0.25]) --> Moving average (blur) # 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, -1]) --> 1st finite difference (1st derivative)
# convolve(data, [1, -2, 1]) --> 2nd finite difference (2nd derivative) # convolve(data, [1, -2, 1]) --> 2nd finite difference (2nd derivative)
kernel = list(reversed(kernel)) kernel = tuple(kernel)[::-1]
n = len(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)): for x in chain(signal, repeat(0, n-1)):
window.append(x) window.append(x)
yield sum(map(operator.mul, kernel, window)) yield sum(map(operator.mul, kernel, window))