簡體   English   中英

在Python / Numpy / Scipy中找到兩個數組之間的插值交點

[英]finding the interpolated intersection between two arrays in Python/Numpy/Scipy

我正在尋找一種簡單的方法來查找兩個Numpy數組之間的插值交集。 我知道,如果我們有兩個函數句柄而不是兩個數組,就可以輕松實現這一點 ,如使用Scipy或Sympy的鏈接所示。 我想做同樣的事情,但是給定兩個數組,特別是在線性樣條曲線之間,線性樣條曲線是通過線連接數組項而產生的。

例如,假設我們有兩個數組y_1y_2 ,都認為它們是在xSupport上求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值。 在我的應用程序中,支持大於兩個,因此我正在尋找一種與數組長度無關的方法。

數字化模擬信號的過程中 ,我創建了一個名為find_transition_times的函數。 您可以通過傳遞y_1 - y_2來傳遞y0來傳遞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])

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

通過假設找到一個零,然后對兩個序列的差執行函數,可以簡化問題。 首先,“求解”查找發生符號過渡的位置(這意味着在兩者之間的某個位置出現零),然后“插入”執行線性插值以查找解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM