一段离散的具有噪声的波,这段点是离散且震荡的,拟合它的20元线性回归,波形大致趋势是先下降再变缓或者上升再下降,使用python写出找到那个变缓或者上升的点
时间: 2024-05-14 10:14:34 浏览: 194
假设有一个列表data存储了离散的波形数据,我们可以使用numpy库中的polyfit函数进行线性回归拟合,代码如下:
```python
import numpy as np
# 将数据转化为numpy数组
data = np.array(data)
# 使用polyfit函数进行20元线性回归拟合
fit = np.polyfit(range(len(data)), data, 20)
```
接下来我们需要找到那个变缓或者上升的点。根据题意,可以定义一个变量slope表示当前的斜率,初始值为0,然后遍历拟合后的结果fit,计算当前点的斜率,并与前一个点的斜率进行比较,如果当前点的斜率大于前一个点的斜率,则将slope设为1,表示当前正在上升;如果当前点的斜率小于前一个点的斜率,则将slope设为-1,表示当前正在下降。如果当前点的斜率与前一个点的斜率相等,则不做处理。最后当slope从-1变为1时,就找到了变缓或者上升的点。
代码如下:
```python
# 定义斜率变量slope
slope = 0
# 遍历拟合结果
for i in range(1, len(fit)):
# 计算当前点的斜率
curr_slope = fit[i] - fit[i-1]
# 如果当前点的斜率大于前一个点的斜率,则将slope设为1
if curr_slope > slope:
slope = 1
# 如果当前点的斜率小于前一个点的斜率,则将slope设为-1
elif curr_slope < slope:
slope = -1
# 如果当前点的斜率与前一个点的斜率相等,则不做处理
else:
continue
# 如果slope从-1变为1,则找到了变缓或者上升的点
if slope == 1 and slope_prev == -1:
inflection_point = i-1
break
slope_prev = slope
```
最终的结果存储在变量inflection_point中,表示变缓或者上升的点在data中的索引。
阅读全文