Python伪逆和向量行列式

3
如何使用numpy或更好的pandas计算向量的伪逆和行列式?以下是我尝试过但不起作用的代码:
import numpy
vect = [1, 2, 3, 4]
numpy.linalg.pinv(vect)

但是我遇到了这个错误:
---------------------------------------------------------------------------
LinAlgError                               Traceback (most recent call last)
<ipython-input-106-e362654e383f> in <module>()
     19 vect = [1, 2, 3, 4]
---> 20 print(np.linalg.pinv(vect))

C:\Python27\lib\site-packages\numpy\linalg\linalg.pyc in pinv(a, rcond)
   1544     _assertNonEmpty(a)
   1545     a = a.conjugate()
-> 1546     u, s, vt = svd(a, 0)
   1547     m = u.shape[0]
   1548     n = vt.shape[1]

C:\Python27\lib\site-packages\numpy\linalg\linalg.pyc in svd(a, full_matrices, compute_uv)
   1269     """
   1270     a, wrap = _makearray(a)
-> 1271     _assertRank2(a)
   1272     _assertNonEmpty(a)
   1273     m, n = a.shape

C:\Python27\lib\site-packages\numpy\linalg\linalg.pyc in _assertRank2(*arrays)
    153         if len(a.shape) != 2:
    154             raise LinAlgError, '%d-dimensional array given. Array must be \
--> 155             two-dimensional' % len(a.shape)
    156 
    157 def _assertSquareness(*arrays):

LinAlgError: 1-dimensional array given. Array must be             two-dimensional

错误明确指出问题:“LinAlgError:给定1维数组。数组必须是二维的。” - Kumar
1个回答

5
也许您想要这个?
>>> np.linalg.pinv([[1, 2, 3, 4]])
array([[ 0.03333333],
       [ 0.06666667],
       [ 0.1       ],
       [ 0.13333333]])

注意多出来的一对括号。正如错误信息所示,你只能对矩阵求伪逆。如果你只有一个向量,你需要将它转换成一个1行矩阵。

1
谢谢您的提示!确实对于linalg.pinv有效,但是对于linalg.det无效!(错误:“数组必须是正方形”)您有任何处理det的想法吗? - gaborous
1
@user1121352:我可以问一下你对于非方阵行列式的使用案例是什么吗? - DSM
@user1121352:行列式只在方阵中有数学定义。 - BrenBarn
没事,我在适应之前用Octave编写的代码,Octave的diag()函数可以从矩阵返回向量,也可以从向量返回矩阵(非常令人困惑!)。谢谢你的建议,我会记住的。 - gaborous
1
@BrenBarn:实际上,你可以做出一些概括性的描述,仍然称之为行列式,但它们相当晦涩,很少有用。(顺便说一句,你的头像让我回忆起了过去..) - DSM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接