如何找到曲线(作为 np.array)与 y==0 的精确交点?
- 2025-01-17 09:23:00
- admin 原创
- 114
问题描述:
如何从 Python 中的绘图中获取y轴上的精确值?我有两个数组vertical_data
,gradient(temperature_data)
并将它们绘制为:
plt.plot(gradient(temperature_data),vertical_data)
plt.show()
此处显示的图:
我需要零值,但它不完全是零,它是一个浮点数。
解决方案 1:
我没有找到如何找到 numpy 数组的根或零点的好答案,因此这里有一个解决方案,使用简单的线性插值。
import numpy as np
N = 750
x = .4+np.sort(np.random.rand(N))*3.5
y = (x-4)*np.cos(x*9.)*np.cos(x*6+0.05)+0.1
def find_roots(x,y):
s = np.abs(np.diff(np.sign(y))).astype(bool)
return x[:-1][s] + np.diff(x)[s]/(np.abs(y[1:][s]/y[:-1][s])+1)
z = find_roots(x,y)
import matplotlib.pyplot as plt
plt.plot(x,y)
plt.plot(z, np.zeros(len(z)), marker="o", ls="", ms=4)
plt.show()
x
当然,你可以反转和的角色y
来得到
plt.plot(y,x)
plt.plot(np.zeros(len(z)),z, marker="o", ls="", ms=4)
因为人们询问如何获得非零值处的截距y0
,请注意,人们可以简单地找到当时的零点y-y0
。
y0 = 1.4
z = find_roots(x,y-y0)
# ...
plt.plot(z, np.zeros(len(z))+y0)
人们还问如何求两条曲线的交点。在这种情况下,还是要找到两者差异的根,例如
x = .4 + np.sort(np.random.rand(N)) * 3.5
y1 = (x - 4) * np.cos(x * 9.) * np.cos(x * 6 + 0.05) + 0.1
y2 = (x - 2) * np.cos(x * 8.) * np.cos(x * 5 + 0.03) + 0.3
z = find_roots(x,y2-y1)
plt.plot(x,y1)
plt.plot(x,y2, color="C2")
plt.plot(z, np.interp(z, x, y1), marker="o", ls="", ms=4, color="C1")
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD