Каков наилучший способ сложения или вычитания 2 интерполированных кривых? - PullRequest
1 голос
/ 23 мая 2019

Какой лучший способ сложить или вычесть 2 интерполированных кривых в Python.Примером может быть добавление кредитного спрэда к ставке казначейства.2 кривые не имеют одинаковых точек слагаемых.Я могу перестроить кривую, получив конкретный тенор, но я надеялся, что есть лучший способ.

import scipy as sc
ATenor = [0.25,0.5,1,5,10,20]
ARate = [0.02,0.022,0.025,0.03,0.035,0.039]
ACurve = sc.interpolate.interp1d(ATenor,ARate)
BTenor = [0.25,1,4,5,7,10,15,20]
BRate = [0.025,0.28,0.032,0.036,0.038,0.042,0.04,0.038]
BCurve = sc.interpolate.interp1d(BTenor,BRate)
CCurve = ACurve + BCurve  # <-- This does not work but to get the idea across

Если попытаться добавить 2 интерполированные кривые, я получаю эту ошибку:

неподдерживаемый тип операнда (s) для +: 'interp1d' и 'interp1d'

1 Ответ

0 голосов
/ 23 мая 2019

Если вы хотите создать новый объект interp1d, вы можете объединить тенорные массивы (ось X) и пересчитать значения ставки (ось Y). Например, этот код будет делать:

ABTenor = sorted(set(ATenor + BTenor))              # Merge points on the x-axis.
ABCurve = [ACurve(x) + BCurve(x) for x in ABTenor]  # Compute y values.
ABCurve = scipy.interpolate.interp1d(ABTenor, ABCurve)

Кроме того, вы можете создать функцию отложенного вычисления:

def add_curves(A, B):
    def compute(x):
        return A(x) + B(x)
    return compute

ABCurve = add_curves(ACurve, BCurve)
# ABCurve(10.0) will call ACurve(10.0) and BCurve(10.0) and sum the results.
...