SSA python, исключение индекса - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь выполнить следующие задачи:

Метод сингулярного спектрального анализа SSA реализован в 2 этапа - декомпозиции и группировки. Соответственно, нам нужно написать несколько функций для разложения числа по сингулярному значению, а затем в конец группы.

Начнем с этапа декомпозиции. Это будет функция def SA_models(F, L), которая принимает два параметра: сам временной ряд F и длину окна расширения L. Внутри функции нам нужно определить размер траектории x матрицы L x K. Заполнить элементы этой матрицы самостоятельно с X точек в массиве серии. F = f(t)= {f(t0), .., f(tn-1)} через их «вложение» по столбцам

enter image description here

Прежде чем продолжить, проверьте полученную матрицу на правильность построения при малых значениях окна длина. 7) теперь вы можете реализовать второй шаг метода SSA. В этой функции - это шаг сингулярного расширения. Сначала вам нужно создать полную матрицу S = X * (X ^ T)

S = np.dot(X, X.T)

. Для разложения мы используем нижеприведенную функцию, с помощью которой мы сразу получаем желаемое сингулярное разложение SVD = Разложение по сингулярному значению .

U, A, _ = np.linalg.svd(S)

Здесь U - матрица собственных векторов, а A - массив собственных значений.

Используйте следующий простой пример, чтобы проверить, работает ли эта функция правильно:

ts = np. array([3, 2, 1, 2, 3, 2, 1, 2, 3, 2, 1, 2, 3]) # mini time series
A, U, V = SA_models (ts, 3) # its decomposition with window length = 3
print (A) # proper numbers
print (U) # eigenvectors print (V) # trajectory vectors

Я пытался сделать это, и мой последний код:

import numpy as np 
import numpy.random as rand 
import matplotlib.pyplot as plt 
import h5py 
%matplotlib inline 


def SSA_modes(F, L): 
    N = len(F) 
    K = N - L + 1
    X = np.array([np.arange(N)+i for i in range(K)])
    X = F[X]
    S = np.dot(X, X.T)      
    U, A, _ = np.linalg.svd(S) 
    return U, A
ts = np.array([3, 2, 1, 2, 3, 2, 1, 2, 3, 2, 1, 2, 3]) 
A, U= SSA_modes(ts, 3)  
print(A) 
print(U) 

И есть ошибка:

IndexError           Traceback (most recent call last)
<ipython-input-161-da8861ad5126> in <module>
      1 ts = np.array([3, 2, 1, 2, 3, 2, 1, 2, 3, 2, 1, 2, 3]) 
----> 2 A, U= SSA_modes(ts, 3) 
      3 print(A) 
      4 print(U)
      5 

<ipython-input-160-92d9d3c1d618> in SSA_modes(F, L)
      5     print(X)
      6     print(F)
----> 7     X = F[X] +1
      8     S = np.dot(X, X.T)
      9     U, A, _ = np.linalg.svd(S)

IndexError: index 13 is out of bounds for axis 0 with size 13

Что не так? Все индексы в размере 13. Я не понимаю.

...