Python:numpy.linalg.linalgerror:数组的最后2个维必须为正方形

问题描述 投票:0回答:2

我有一个矩阵给出这样的东西:

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) 

我该怎么做?

python numpy eigenvalue
2个回答
1
投票

您不能直接计算矩阵的特征值,因为它不是正方形。为了找到特征值和特征向量,必须将矩阵对角线化,这涉及在中间步骤进行矩阵求逆,并且only square matrices are invertible

为了从非平方矩阵中找到特征值,您可以计算奇异值分解(以numpy表示:np.linalg.svd)。然后,可以将奇异值与特征值相关联,如np.linalg.svdhere所述。引用答案之一:

定义:here矩阵A的奇异值是相应矩阵m×n的非零特征值的正平方根。相应的特征向量称为奇异向量。


0
投票

您的数组不是正方形,只需填充零列即可对其进行修复。

A.T*A

输出:

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)
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.