在 Python/Numpy/Scipy 中找到两个数组之间的插值交集
finding the interpolated intersection between two arrays in Python/Numpy/Scipy
我正在寻找一种简单的方法来查找两个 Numpy 数组之间的插值交集。我知道如果我们有两个函数句柄而不是两个数组,这很容易实现,如 this link 使用 Scipy 或使用 Sympy 所示。我想做同样的事情,但是给定两个数组,特别是在由线连接数组条目产生的线性样条之间。
例如,假设我们有两个数组,y_1
和 y_2
,这两个数组都被认为是在 xSupport
处计算的。
import numpy as np
xSupport = np.array([0,1])
y_1 = np.array([0,2])
y_2 = np.array([1,0])
我正在寻找 returns 1/3
的函数,它是这两条线之间交点处的 x 值。在我的应用程序中,支持大于两个,所以我正在寻找一种与数组长度无关的方法。
在 Digitizing an analog signal 中,我创建了一个名为 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])
与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' 执行线性插值以找到解决方案。
我正在寻找一种简单的方法来查找两个 Numpy 数组之间的插值交集。我知道如果我们有两个函数句柄而不是两个数组,这很容易实现,如 this link 使用 Scipy 或使用 Sympy 所示。我想做同样的事情,但是给定两个数组,特别是在由线连接数组条目产生的线性样条之间。
例如,假设我们有两个数组,y_1
和 y_2
,这两个数组都被认为是在 xSupport
处计算的。
import numpy as np
xSupport = np.array([0,1])
y_1 = np.array([0,2])
y_2 = np.array([1,0])
我正在寻找 returns 1/3
的函数,它是这两条线之间交点处的 x 值。在我的应用程序中,支持大于两个,所以我正在寻找一种与数组长度无关的方法。
在 Digitizing an analog signal 中,我创建了一个名为 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])
与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' 执行线性插值以找到解决方案。