假设您有两个来自计算的数据值数组,您可以使用连续,可微分函数进行建模.数据点的两条"线"在(至少)一点交叉,现在的问题是这些数据集背后的函数是否实际交叉或反交叉.
下面的图片显示了这种情况,我知道(从它背后的物理学),在上面的两个"接触点",黄色和绿色线实际上应该"切换颜色",而在较低的一个,两个功能彼此不同办法:
为了给出更简单的"玩具集"数据,请以此代码为例:
import matplotlib.pyplot as plt
import numpy as np
x=np.arange(-10,10,.5)
y1=[np.absolute(i**3)+100*np.absolute(i) for i in x]
y2=[-np.absolute(i**3)-100*np.absolute(i) for i in x][::-1]
plt.scatter(x,y1)
plt.scatter(x,y2,color='r')
plt.show()
Run Code Online (Sandbox Code Playgroud)
哪个应该产生以下图像:
现在我怎么能推断数据背后的趋势是否交叉(使得从数据下部左侧延续到上右)或抗交叉(如与上面的颜色表示,从数据下部左侧延续到下右)?
到目前为止,我能够通过查看它们之间差异的导数找到这些数据集之间的"联系点",大致如下:
closePoints=np.where(np.diff(np.diff(array_A - array_B) > 0))[0] + 1
Run Code Online (Sandbox Code Playgroud)
(用scipy的cKDTree来评估可能会更快).
我应该继续(可能非常低效)检查交叉路口两侧的导数吗?或者我可以以某种方式检查左侧数据的推断是否更适合穿越或反交叉?