(Python科学计算包)NumPy文档:10.1 线性代数

四月 20th, 2009 发表评论 阅读评论

翻译者:Keengle(http://www.kgblog.net

10.1 线性代数(linalg)

以下函数包含于numpy.linalg包中。

inv(A) 

    返回2维数组的(矩阵)的逆。这个结果X,就是满足 dot( A,X)等于eye( *A.shape ) (在机器精度范围内)。

solve(A,b)

    计算线性方程Ax=b的解,其中A是一个2维数组,b是一个1维或2维的数组。

tensorsolve(A,b,axes=None)

    计算以下多下标线性方程的解xkl,

tensorinv(A,ind=2)

    计算A的张量逆阵,张量是这样定义的:tensordot(Ainv,A)是一个单位算子。

cholesky(A)

    返回A的对称正定矩阵分解L对称正定矩阵分解是指,当A=AH,且xHAx0,对所有x都成立,则A的分解可以从这个等式解出来:A=LLH,其中L是下三角矩阵。

eigvals(A)

    返回满足方程Ax=x的所有解(),也就是A的特征值。

eig(A)

    返回满足方程Ax=x的所有解元组(, x )。返回的元组的第一个元素包含所有的特征值。第二个元素包含了所有的特征向量在各列(x[:,i]是第i个特征向量)。

eigvalsh(U)

eigh(U)

    这两个函数跟eigvals和eig的唯一不同点就是它们只对共轭矩阵有效,也就是满足UH=U(只需要用到下三角的部分就可以了).

svd(A)

    计算2维矩阵A的奇异值分解。每一个m*n的矩阵都可以分解为一对单位矩阵,U=UH(m*m)和V=VH(n*n),和一个m*n的“对角”矩阵,满足A=UVH。而仅有的非零的部分就是上面的r*r块,其中r=min(m,n)。这个svd函数返回三个数组组成的元组:(U,,VH)。矩阵的奇异值就是1维的数组。如果需要,数组可以计算出来,先生成r*r的对角块,再将它嵌入到一个全0矩阵中。如下:

>>> A=random.rand(3,5)

>>> from numpy.dual import svd; U,s,Vh=svd(A)

>>> r=min( *A.shape ); Sig=zeros_like(A);

>>> Sig[:r,:r]=diag(s); print Sig

[[ 2.18326497  0.          0.          0.          0.        ]

 [ 0.          0.69966943  0.          0.          0.        ]

 [ 0.          0.          0.230158    0.          0.        ]]

 

pinv(A,rcond=10-10)

    返回A的一般化的伪逆阵。对于可逆矩阵,这跟inverse是一模一样的。

det(A)

    返回数组的行列式的值。数组的行列式的值等于它的奇异值的乘积。

lstsq(A,b,rcond=10-10)

    返回(x, resides, rank, s ),其中x使得resids=||Ax-b||2最小化。Rank就是A的秩,s是奇异值以降序序列输出。奇异值如果小于s[0]*rcond就看作是0。如果A的秩小于A的列数或大于行数,resids将返回一个空数组。

 

注:转载请注明出处http://www.kgblog.net

分类: python学习 标签: Python科学计算  NumPy  线性代数  (2630次阅读)

  1. 2009-04-21 at 00:04
    文中有些公式无法正常显示,如果有读者需要doc原文,可以联系keeng2008@qq.com,免费获取。
  2. yingzi
    2009-05-24 at 22:21
    能否发那个word文档给我? <br />zchuang2006@gmail.com
  3. 2009-05-25 at 10:59
    @yingzi: 已经发送,请查收。