[英]Is there a way to speed up this smoothing operation in python?
我正在对列表中的一些顺序整数数据进行平滑处理。 我的平滑方法是用该数字及其邻居的均值替换每个数字。 我目前正在使用此代码:
from statistics import mean
smoothednums = [mean(nums[:2])] + [mean(nums[i-1:i+2]) for i in range(1,len(nums))]
这大大增加了我的脚本的运行时间。 有没有更好的方法来执行此操作?
https://docs.scipy.org/doc/numpy/reference/generation/numpy.convolve.html
您正在使用统一(框)过滤器描述卷积:
smoothednums = np.convolve(nums, [1/3, 1/3, 1/3]);
对于较大的窗口,您可以考虑查看窗口面积为O(1)的总面积表算法:
您可以通过加减每个值的1/3来避免所有切片和复制。 (浮点错误使它与您的原始错误不完全相同,但是在正常情况下应该足够接近。)我不知道它的结束速度是否更快,但似乎值得一试:
window_mean = mean(nums[:3])
smoothednums = [mean(nums[:2]), window_mean]
for i in range(2, len(nums) - 1):
window_mean -= nums[i - 2] / 3
window_mean += nums[i + 1] / 3
smoothednums.append(window_mean)
smoothednums.append(mean(nums[-2:]))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.