可以用python给我编写一个用滑动窗口平滑曲线的代码吗
时间: 2023-09-12 11:12:16 浏览: 101
当然可以,下面是一个用滑动窗口平滑曲线的Python代码示例:
```
import numpy as np
import matplotlib.pyplot as plt
def smooth_curve(x, y, window_size):
"""
使用滑动窗口平滑曲线
:param x: x轴坐标
:param y: y轴坐标
:param window_size: 窗口大小
:return: 平滑后的曲线
"""
assert len(x) == len(y)
if window_size < 3:
return x, y
half_size = window_size // 2
smoothed_x = x[half_size:-half_size]
smoothed_y = []
for i in range(half_size, len(y) - half_size):
window = y[i - half_size:i + half_size + 1]
smoothed_y.append(np.mean(window))
return smoothed_x, smoothed_y
# 生成随机数据
x = np.linspace(0, 10, 100)
y = np.sin(x) + np.random.normal(0, 0.1, len(x))
# 绘制原始曲线
plt.plot(x, y, label='Raw Data')
# 绘制平滑后的曲线
smoothed_x, smoothed_y = smooth_curve(x, y, window_size=5)
plt.plot(smoothed_x, smoothed_y, label='Smoothed Data')
# 设置图例和标题
plt.legend()
plt.title('Smooth Curve')
# 显示图像
plt.show()
```
在这个示例代码中,我们首先生成了一个随机的曲线,然后使用滑动窗口对其进行平滑处理。平滑窗口的大小通过`window_size`参数进行指定。
在`smooth_curve`函数中,我们首先判断输入的`x`和`y`是否长度相等,然后根据`window_size`计算出平滑窗口的半径`half_size`。接下来,我们将`x`中的前`half_size`个和后`half_size`个元素剔除,得到平滑后的`smoothed_x`。对于`y`中的每个元素,我们将其左右`half_size`个元素作为滑动窗口,计算窗口内元素的均值,得到平滑后的`smoothed_y`。
最后,我们使用`matplotlib`库将原始曲线和平滑后的曲线进行绘制,并添加标题和图例。运行代码后,你会看到一个平滑后的曲线。
阅读全文