Я вычисляю собственные значения ковариационной матрицы, которая является действительной и симметричной положительной полуопределенной.Следовательно, все собственные значения и собственные векторы должны быть действительными, однако numpy.linalg.eig()
возвращает комплексные значения с (почти) нулевыми мнимыми компонентами.
Ковариационная матрица слишком велика, чтобы размещать ее здесь, нособственные значения выглядят как
[1.38174e01+00j, 9.00153e00+00j, ....]
с наибольшим мнимым компонентом в векторе, пренебрежимо малым при -9.7557e-16j
.
Я думаю, что здесь есть некоторая проблема точности машины, так как ясно мнимые компонентыпренебрежимо малы (и учитывая, что моя ковариационная матрица является вещественной полу-def-точкой).
Есть ли способ подавить возвращение мнимого компонента с помощью numpy eig (или scipy)?Я пытаюсь избежать оператора if, который проверяет, является ли объект собственного значения сложным, а затем устанавливает его только для реальных компонентов, если это возможно.