Собственные значения и собственные векторы Python

У меня есть матрица совместного страхования 336x336, и я вычислил собственные значения и собственные векторы, используя numpy следующим образом с сортировкой.

evals, evecs = np.linalg.eig(cov)
idx = evals.argsort()   
evals = evals[idx] 
evecs = evecs[:,idx]

Проблема в том, что последнее значение в evals странно по сравнению с другими значениями. Что-то вроде этого:

    evals[:3]
    [ -6.11117191e-19  -6.11117191e-19  -1.08420217e-19]
    evals[-3:]
    [  4.29345466e-19   7.08196415e-19   1.69419875e-02]

Наивысшее собственное значение 1.69419875e-02 очень велико по сравнению с другими значениями. Я проверил все 336 собственных значений, и все, кроме этого, более или менее находятся в том же диапазоне.

Кто-нибудь может сказать мне, почему это так.

Привет mrcl, Спасибо за ответ. Я создал ковариационную матрицу 8x8, используя предложенную вами точность. Теперь это выглядит так:

[[  0.00e+00   0.00e+00   0.00e+00   0.00e+00   0.00e+00   0.00e+00   0.00e+00   0.00e+00]
  [  0.00e+00   4.62e-05   9.25e-05   4.62e-05   0.00e+00  -9.25e-05  -4.62e-05  -4.62e-05]
  [  0.00e+00   9.25e-05   1.85e-04   9.25e-05   0.00e+00  -1.85e-04  -9.25e-05  -9.25e-05]
  [  0.00e+00   4.62e-05   9.25e-05   4.62e-05   0.00e+00  -9.25e-05  -4.62e-05  -4.62e-05]
  [  0.00e+00   0.00e+00   0.00e+00   0.00e+00   0.00e+00   0.00e+00   0.00e+00   0.00e+00]
  [  0.00e+00  -9.25e-05  -1.85e-04  -9.25e-05   0.00e+00   1.85e-04   9.25e-05   9.25e-05]
  [  0.00e+00  -4.62e-05  -9.25e-05  -4.62e-05   0.00e+00   9.25e-05   4.62e-05   4.62e-05]
  [  0.00e+00  -4.62e-05  -9.25e-05  -4.62e-05   0.00e+00   9.25e-05   4.62e-05   4.62e-05]]

Для столбца 1 и строки 1 я не уверен, почему все равно нулю, я вычислил вручную также ковариацию этих столбцов и строк, и она равна только нулю, возможно, в исходных значениях не так много изменений. Исходные значения:

0.06  0.05  0.05  0.08  0.05  0.06  0.06  0.02

0.06  0.04  0.03  0.07  0.05  0.08  0.07  0.03

Спасибо!


person newbie    schedule 31.03.2014    source источник
comment
что такое матрица сострахования?   -  person behzad.nouri    schedule 01.04.2014
comment
Это математический вопрос, а не вопрос программирования. Я отметил это и предложил переместить на math.stackexchange.com.   -  person TooTone    schedule 01.04.2014
comment
также как np.diag(cov) выглядит?   -  person behzad.nouri    schedule 01.04.2014
comment
Может случиться так, что все собственные значения, кроме одного, равны 0, и то, что вы видите, является числовым шумом. Как создается cov?   -  person Warren Weckesser    schedule 01.04.2014


Ответы (2)


Это означает, что все ваши собственные значения равны нулю, кроме одного. Я думаю, ваша матрица не может быть матрицей полного ранга.

person stardust    schedule 01.04.2014

@newbie

Основываясь на матрице 8x8, я заметил шаблон из нулевых строк и столбцов, который повторяется в каждом четвертом столбце или строке. Всякий раз, когда столбец или строка матрицы заполнены нулями, это приводит к тому, что определитель равен нулю, а матрица является сингулярной, поэтому ваша матрица cov не имеет обратной. В этом случае возвращенные собственные значения совпадают с сингулярными значениями из разложения по сингулярным значениям (SVD).

Я бы порекомендовал вам дважды проверить причину, по которой вычисление вашей ковариационной матрицы приводит к появлению строк и столбцов, заполненных нулями, даже на главной диагонали.

Надеюсь, поможет.

person mrcl    schedule 31.03.2014
comment
Фактически я сгенерировал ковариационную матрицу, вычислив частоту ди-три- и тетра-нуклеотидных слов в последовательности. - person newbie; 01.04.2014
comment
fo ex: seq = AATGCGTAGCGTGCAGTAGCAG ' - person newbie; 01.04.2014
comment
и difreq = AA, AT и т. д. tri = AAA, ATG и т. д. и tetra = AAAA, TGAT и т. д. таким образом я генерирует матрицу частот и, таким образом, матрицу ковариации. Итак, моя ковариационная матрица не такая однородная. - person newbie; 01.04.2014
comment
Можете прислать пример с матрицей 10х10, вы можете скопировать и вставить сюда результаты. Это поможет кому-то помочь вам. - person mrcl; 01.04.2014
comment
Привет, mrcl! Вот матрица коврейнс: - person newbie; 01.04.2014
comment
Я не могу скопировать сюда всю матрицу, так как это не позволяет мне это делать. Я создал матрицу 8x8, и здесь только первые 4 строки. - person newbie; 01.04.2014
comment
@newbie, вы можете отредактировать свой пост и включить туда эту информацию. Чтобы сделать его менее загроможденным, вы можете установить точность печатаемых значений с помощью команды np.set_printoptions(precision=2,linewidth=150). Это отрегулирует количество знаков после запятой в напечатанных значениях с плавающей запятой до 2 и увеличит полезную ширину строки в этом случае на 150 символов. Я просмотрел ваши напечатанные значения и заметил, что значения вашего первого столбца и строки равны нулю. По какой-то причине? - person mrcl; 02.04.2014