Python: ошибка значения (‘все входные массивы должны иметь одинаковую форму’) при использовании модуля nelson_siegel_svensson

#python #pandas #numpy

#python #pandas #numpy

Вопрос:

У меня есть фрейм данных со столбцом зрелости и столбцом доходности (оба с плавающей точкой), и я пытаюсь вычислить кривую Нельсона Сигела Свенссона (NSS).

Я использую:

 from nelson_siegel_svensson import NelsonSiegelSvenssonCurve
from nelson_siegel_svensson.calibrate import calibrate_nss_ols

y = df['yield']
t = df['maturity']  
    
curve, status = calibrate_nss_ols(t, y) 
assert status.success
print(curve)
 

И я получаю:
повысить значение ошибки значения (‘все входные массивы должны иметь одинаковую форму’)

Что, по-видимому, происходит, когда nelson_siegel_svensson пытается ссылаться на numpy с помощью:

 return np.stack([constant, factor1, factor2, factor3]).transpose()
 

Я дважды проверил, и мои массивы y и t имеют одинаковые размеры.

Я прочитал кое-что в Интернете о попытке np.column_stack , но поскольку NSS — это не мой код, я не уверен, куда я должен его добавить или зачем он мне нужен.

Комментарии:

1. stack требуется, чтобы все эти 4 массива имели одинаковую форму. Но без полной обратной трассировки (и, возможно, просмотра nelson... исходного кода) мы не сможем отследить эти массивы до ваших аргументов.

2. Что nelson... говорится в документах об аргументах t and y ? Чего он ожидает? массивы numpy с определенными размерами? Все ли в порядке с Pandas Series (который является вашим y и t )? На самом деле это может быть использование t.values etc. Имейте в виду, что немногие, если вообще кто-либо из нас, использовали nelson_siegel_svensson . Я даже не знаю его источника. (и нет соответствующего tag ).

3. ожидается, что t и y будут массивами numpy, в примере на pypi они имеют одинаковую длину, чего я и ожидал бы от кривой доходности. Вывод должен выглядеть следующим образом, т.Е. Только Одно значение для каждого из constant, factor1, factor2, factor3 NelsonSiegelCurve(constant= 0.04201739383636799, factor1 = -0.031829031569430594, factor2 = -0.026797319779108236, factor3 = 1.7170972656534174)

4. Пожалуйста, скопируйте / вставьте полную трассировку ошибок (а не только окончательную ошибку), чтобы люди, которые хотят помочь, могли это сделать.

5. Спасибо. Все отсортировано. Мне просто нужно: