Как вы видели в документах numpy.linalg.eig
, он принимает только один аргумент массива и, соответственно, не вычисляет обобщенные задачи на собственные значения.
К счастью, у нас есть scipy.linalg.eig
:
scipy.linalg.eig(a, b=None, left=False, right=True, overwrite_a=False, overwrite_b=False, check_finite=True, homogeneous_eigvals=False)
Solve an ordinary or generalized eigenvalue problem of a square matrix.
Вот ваш пример:
import numpy as np
import scipy.linalg
a = np.diag(np.ones(3))
b = np.diag(2*np.ones(3))
eigvals,eigvects = scipy.linalg.eig(a, b)
Теперь у нас есть
>>> eigvals
array([0.5+0.j, 0.5+0.j, 0.5+0.j])
>>> eigvects
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
Разница в собственных векторах может быть связана с другим выбором нормализации для собственных значений. Я бы проверил с двумя нетривиальными матрицами и посмотрел бы, соответствуют ли результаты друг другу (конечно, сравнивая соответствующие пары собственных значений и собственных векторов).