首页 > 解决方案 > 在 Python/Numpy/Scipy 中查找两个数组之间的插值交集

问题描述

我正在寻找一种简单的方法来查找两个 Numpy 数组之间的插值交集。我知道如果我们有两个函数句柄而不是两个数组,这很容易实现,如使用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])

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

标签: pythonarraysnumpyscipylinear-interpolation

解决方案


与 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' 执行线性插值以找到解决方案。


推荐阅读