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:
parent
4ac923f275
commit
f421bfce80
|
@ -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))
|
||||||
|
|
Loading…
Reference in New Issue