Python: numpy .linalg.linalgerror: последние 2 измерения массива должны быть квадратными - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть матрица, которая выдает что-то вроде этого:

a = 
[[ 3.14333470e-02  3.11644303e-02  3.03622814e-02  2.90406252e-02
   2.72220757e-02  2.49377488e-02  2.22267299e-02  1.91354055e-02
   1.57166688e-02  1.20290155e-02  8.13554227e-03  4.10286765e-03
  -8.19802426e-09 -4.10288390e-03 -8.13555810e-03 -1.20290306e-02
  -1.57166830e-02 -1.91354185e-02 -2.22267415e-02 -2.49377588e-02
  -2.72220839e-02 -2.90406315e-02 -3.03622856e-02 -3.11644324e-02
  -3.14333470e-02]
 [ 0.00000000e+00  2.90117128e-03  5.75270270e-03  8.50580375e-03
   1.11133681e-02  1.35307796e-02  1.57166756e-02  1.76336548e-02
   1.92489172e-02  2.05348252e-02  2.14693765e-02  2.20365808e-02
   2.22267328e-02  2.20365792e-02  2.14693735e-02  2.05348208e-02
   1.92489114e-02  1.76336477e-02  1.57166674e-02  1.35307704e-02
   1.11133581e-02  8.50579304e-03  5.75269150e-03  2.90115979e-03
  -1.15937571e-08]
 [ 0.00000000e+00  2.90117128e-03  5.75270270e-03  8.50580375e-03
   1.11133681e-02  1.35307796e-02  1.57166756e-02  1.76336548e-02
   1.92489172e-02  2.05348252e-02  2.14693765e-02  2.20365808e-02
   2.22267328e-02  2.20365792e-02  2.14693735e-02  2.05348208e-02
   1.92489114e-02  1.76336477e-02  1.57166674e-02  1.35307704e-02
   1.11133581e-02  8.50579304e-03  5.75269150e-03  2.90115979e-03
  -1.15937571e-08]]

, и я хочу вычислить собственные значения и собственные векторы

w, v = numpy.linalg.eig(a) 

Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

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

Для того, чтобы найти Собственные значения из неквадратной матрицы вы можете вычислить разложение по сингулярным значениям (в numpy: np.linalg.svd). Затем вы можете связать сингулярные значения с собственными значениями, как объяснено здесь или здесь . Цитируя один из ответов:

Определение: особые значения m×n матрицы A являются положительными квадратными корнями ненулевых собственных значений соответствующей матрицы A.T*A. Соответствующие собственные векторы называются сингулярными векторами.

0 голосов
/ 09 апреля 2020

Ваш массив не квадратный, просто заполните нулевой столбец, чтобы исправить это.

import numpy 

a = numpy.array(([1,7,3,9],[3,1,5,1],[4,2,6,3]))

# fill with zeros to get a square matrix
z = numpy.zeros((max(a.shape), max(a.shape)))
z[:a.shape[0],:a.shape[1]] = a
a = z
w, v = numpy.linalg.eig(a) 

print(w)

print(v)

Out:

[10.88979431 -2.23132083 -0.65847348  0.        ]
[[-0.55662903 -0.89297739 -0.8543584  -0.58834841]
 [-0.50308806  0.25253601 -0.0201359  -0.58834841]
 [-0.66111007  0.37258146  0.51929401  0.39223227]
 [ 0.          0.          0.          0.39223227]]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...