Я пытаюсь выполнить следующие задачи:
Метод сингулярного спектрального анализа 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](https://i.stack.imgur.com/M1Ruc.png)
Прежде чем продолжить, проверьте полученную матрицу на правильность построения при малых значениях окна длина. 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. Я не понимаю.