2013-04-08 19 views
2

如何計算向量的僞逆和行列式? (最好用兩種numpy的,或更好的大熊貓)Python僞逆和行列式的行列式

我試過,但它不工作:

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 

回答

4

也許你想嗎?

>>> np.linalg.pinv([[1, 2, 3, 4]]) 
array([[ 0.03333333], 
     [ 0.06666667], 
     [ 0.1  ], 
     [ 0.13333333]]) 

請注意額外的一組括號。如錯誤消息所示,您只能採用矩陣的僞逆。如果你只有一個向量,你需要把它做成一行矩陣。

+1

感謝您的提示!事實上,它適用於linalg.pinv,但它不適用於linalg.det! (錯誤:「數組必須是正方形」)你有什麼想法我可以如何處理det? – gaborous 2013-04-08 19:33:52

+1

@ user1121352:我可以問你有什麼使用情況的非方矩陣的行列式? – DSM 2013-04-08 19:38:10

+0

@ user1121352:行列式僅在數學上爲方陣定義。 – BrenBarn 2013-04-08 19:38:42