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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Python / Numpy / Scipy中找到两个数组之间的插值交集相关的知识,希望对你有一定的参考价值。

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

例如,假设我们有两个数组,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值。在我的应用程序中,支持大于2,所以我正在寻找一种独立于数组长度的方法。

答案

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

另一答案

Digitizing an analog signal,我创建了一个名为find_transition_times的函数。您可以通过为y_1 - y_2传递y并为0传递threshold来使用该函数:

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])

以上是关于在Python / Numpy / Scipy中找到两个数组之间的插值交集的主要内容,如果未能解决你的问题,请参考以下文章

Python + alglib + NumPy:如何避免将数组转换为列表?

如何使用 python + NumPy / SciPy 计算滚动/移动平均值?

Python 中的二阶导数 - scipy/numpy/pandas

Python (NumPy, SciPy),寻找矩阵的零空间

使用 scipy/numpy 在 python 中进行图像处理的高通滤波器

Python地理数据处理环境的搭建和准备(numpy,scipy,matplotlib)