найти интерполированное пересечение между двумя массивами в Python / Numpy / Scipy - PullRequest
0 голосов
/ 20 мая 2018

Я ищу простой подход к поиску интерполированного пересечения между двумя массивами 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 на пересечениях между этими двумя линиями.В моем приложении поддержка больше двух, поэтому я ищу подход, который не зависит от длины массивов.

Ответы [ 2 ]

0 голосов
/ 20 мая 2018

В тех же строках, что и ответ Сер:

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)

Проблема может быть упрощена, если предположить, что вы находите ноль, а затем выполнить функцию для разности двух рядов.Сначала «решить» находит, где происходит переход знака (подразумевается, что где-то между ними происходит ноль), а затем «интерп» выполняет линейную интерполяцию, чтобы найти решение.

0 голосов
/ 20 мая 2018

Over in Оцифровывая аналоговый сигнал , я создал функцию под названием 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])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...