在 Python/Numpy/Scipy 中查找两个数组之间的插值交集



我正在寻找一种简单的方法来查找两个 Numpy 数组之间的插值交集。我知道如果我们有两个函数句柄而不是两个数组,就可以简单地实现这一点,如使用 Scipy 或使用 Sympy 的此链接所示。我想做同样的事情,但给定两个数组,特别是在通过线连接数组条目产生的线性样条之间。

例如,假设我们有两个数组,y_1y_2,两者都应该在xSupport处被评估。

import numpy as np
xSupport = np.array([0,1])
y_1 = np.array([0,2])
y_2 = np.array([1,0])

我正在寻找返回1/3的函数,它是这两行之间交点处的 x 值。在我的应用程序中,支持大于两个,因此我正在寻找一种独立于数组长度的方法。

与 ser' 的答案相同:

import numpy as np
x = np.array([0,1])
y1 = np.array([0,2])
y2 = np.array([1,0])
def solve(f,x):
s = np.sign(f)
z = np.where(s == 0)[0]
if z:
return z
else:
s = s[0:-1] + s[1:]
z = np.where(s == 0)[0]
return z
def interp(f,x,z):
m = (f[z+1] - f[z]) / (x[z+1] - x[z])
return x[z] - f[z]/m
f = y1-y2
z = solve(f,x)
ans = interp(f,x,z)
print(ans)

通过假设您找到一个零,然后对两个序列的差值执行函数,可以简化问题。 首先,"solve"找到符号转换发生的位置(意味着零出现在两者之间(,然后"interp"执行线性插值以找到解决方案。

在数字化模拟信号中,我创建了一个名为find_transition_times的函数。 您可以通过为y传递y_1 - y_2并为threshold传递0来使用该函数:

In [5]: xSupport = np.array([0,1])
...: y_1 = np.array([0,2])
...: y_2 = np.array([1,0])
...: 
In [6]: find_transition_times(xSupport, y_1 - y_2, 0)
Out[6]: array([ 0.33333333])

最新更新