SciPy метод eigsh дает неинтуитивные результаты - PullRequest
0 голосов
/ 17 мая 2018

Я пытался использовать функцию SciPy linalg.eigsh для вычисления нескольких собственных значений и собственных векторов матрицы. Однако, когда я печатаю вычисленные собственные векторы, они имеют тот же размер, что и число собственных значений, которые я хотел вычислить. Разве это не должно дать мне фактический собственный вектор, размер которого такой же, как у исходной матрицы?

Мой код для справки:

id = np.eye(13)
val, vec = sp.sparse.linalg.eigsh(id, k = 2)
print(vec[1])

Что дает мне:

[-0.26158945  0.63952164]

Хотя интуитивно он должен иметь размерность 13. И это также не должно быть нецелым значением. Это только мое неправильное толкование функции? Если так, есть ли в Python какая-либо другая функция, которая может вычислить несколько собственных векторов (я не хочу полный спектр) требуемой размерности?

1 Ответ

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

vec - массив с формой (13, 2).

In [21]: vec
Out[21]: 
array([[ 0.36312724, -0.04921923],
       [-0.26158945,  0.63952164],
       [ 0.41693924,  0.34811192],
       [ 0.30068329, -0.11360339],
       [-0.05388733, -0.3225355 ],
       [ 0.47402124, -0.28180261],
       [ 0.50581823,  0.29527393],
       [ 0.06687073,  0.19762049],
       [ 0.103382  ,  0.29724875],
       [-0.09819873,  0.00949533],
       [ 0.05458907, -0.22466131],
       [ 0.15499849,  0.0621803 ],
       [ 0.01420219,  0.04509334]])

Собственные векторы хранятся в столбцах vec. Чтобы увидеть первый собственный вектор, используйте vec[:, 0]. Когда вы печатали vec[0] (что эквивалентно vec[0, :]), вы печатали первую строку vec, которая является только первыми компонентами двух собственных векторов.

...