我正在学习Python的入门课程,如果y = 0,我在识别x值时遇到了一些麻烦。这是可能的方式,还是有其他的方法?
import numpy as np
import matplotlib.pyplot as plt
x = [0, 50, 100, 150, 200]
y = [0.166, 0.282, 0.032, -0.124, -0.292]
y_value = 0
print(np.interp(y_value, y, x))
plt.plot(y, x, '--ro')
plt.show()
我尝试使用numpy.interp(),但我在'200'中输入的每个y值都是输出。
1条答案
按热度按时间omtl5h9j1#
初级解决方案
作为初学者,我只需要对0附近的值进行简单的线性插值。我的意思是找到
y=0
周围x和y点之间的斜率和y截距,并使用它来找到y=0
处x的近似解。我假设既然你正在上一门初学者课程,这可能是一个足够好的解决方案。但是,还有其他方法可以解决这个问题!
更多趣味解决方案:SciPy插值
为了澄清@jared在他的评论中所说的内容,您可以创建一条样条或“最佳拟合线”,以尽可能地拟合数据,导出样条函数的多项式,并求解该函数的
y = 0
。SciPy有一些非常酷的工具可以让你做到这一点。在我看来,这不是最适合初学者的解决方案,但它非常有用。为了创建样条,我设置
k=3
来指定三次样条;但是,设置k=2
或k=4
也有效。设置k=1
可能不是最好的选择,因为这将创建一个线性样条,并且似乎您的数据从正趋势切换到负趋势,这意味着您在y=0
处对x
的解决方案可能不准确。定义
curve
的第二行使用了SciPy中一个很酷的类PPoly
,你可以在documentation中读到一些。从本质上讲,样条曲线被转换成一个分段函数,可以在任何y
点求解。在运行这个之前,请确保安装带有
pip install scipy
的SciPy。希望这有帮助!