gpt4 book ai didi

python - 在 Python 中平滑曲线

转载 作者:太空宇宙 更新时间:2023-11-03 13:31:23 26 4
gpt4 key购买 nike

我有两个数据点列表:

list_x = [-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]
list_y = [1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

当我绘制它们时,图形将如下所示:

import matplotlib.pyplot as plt
plt.plot(list_x, list_y)
plt.show()

enter image description here

基于这些数据点,有没有办法使图形看起来像下面的图形并得到它的图形方程?

enter image description here

============================================= ============

我尝试使用来自 here 的解决方案,它会生成一个不平滑的图形。

from scipy.interpolate import spline
import numpy as np

list_x_new = np.linspace(min(list_x), max(list_x), 1000)
list_y_smooth = spline(list_x, list_y, list_x_new)

plt.plot(list_x_new, list_y_smooth)
plt.show()

enter image description here

最佳答案

与 Davis Herring 的建议相呼应的一个简单选择是对数据使用多项式近似

import numpy as np
import matplotlib.pyplot as plt

plt.figure()
poly = np.polyfit(list_x,list_y,5)
poly_y = np.poly1d(poly)(list_x)
plt.plot(list_x,poly_y)
plt.plot(list_x,list_y)
plt.show()

Polynomial approximation

您会注意到原始数据中不存在的绘图右端的振荡,这是多项式逼近的产物。

Davis 上面建议的样条插值是另一个不错的选择。改变平滑度参数 s,您可以在平滑度和与原始数据的距离之间取得不同的平衡。

from scipy.interpolate import splrep, splev

plt.figure()
bspl = splrep(list_x,list_y,s=5)
bspl_y = splev(list_x,bspl)
plt.plot(list_x,list_y)
plt.plot(list_x,bspl_y)
plt.show()

B-spline approximation

关于python - 在 Python 中平滑曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46633544/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com