zoukankan      html  css  js  c++  java
  • Scipy学习笔记 矩阵计算

    Scipy学习笔记

    非本人原创  原链接 http://blog.sina.com.cn/s/blog_70586e000100moen.html

    1.逆矩阵的求解

      >>>import scipy

      >>>from scipy import linalg

      >>>a=scipy.mat('[1 2 3;2 2 1;3 4 3]')

      >>>b=linalg.inv(a)

      >>>print b

      输出结果

      [[ 1.   3.  -2. ]
       [-1.5 -3.   2.5]
       [ 1.   1.  -1. ]]

      >>> a*b

      输出结果
      matrix([[  1.00000000e+00,  -4.44089210e-16,  -4.44089210e-16],
              [  0.00000000e+00,   1.00000000e+00,  -2.22044605e-16],
              [ -4.44089210e-16,   0.00000000e+00,   1.00000000e+00]])

     

     

    2.求行列式的值

      >>> linalg.det(a)
      输出结果

      1.9999999999999996

     

     

    3.求a的模
      >>> linalg.norm(a)
      输出结果

      7.5498344352707498

     

     

    4.求超定方程的最小二乘解

      >>> a=scipy.mat('[1 -1;-1 1;2 -2;-3 1]')
      >>> a
      matrix([[ 1, -1],
            [-1,  1],
            [ 2, -2],
            [-3,  1]])
      >>> b=scipy.mat('[1;2;3;4]')
      >>> b
      matrix([[1],
              [2],
              [3],
              [4]])
      >>> x,y,z,w=linalg.lstsq(a,b)

      输出结果
      >>> x                                                                                     #x为解
      array([[-2.41666667],
             [-3.25      ]])
      >>> y
      array([ 9.83333333])
      >>> z
      2
      >>> w
      array([ 4.56605495,  1.07291295])

     

     

    5.求特征值及特征向量 
      >>> a=scipy.mat('[-1 1 0;-4 3 0;1 0 2]')
      >>> a
      matrix([[-1,  1,  0],
              [-4,  3,  0],
              [ 1,  0,  2]])
      >>> x,y=linalg.eig(a)

      输出结果
      >>> x                                                                                 #x为特征值
      array([ 2.+0.j,  1.+0.j,  1.+0.j])
      >>> y                                                                               #y为特征向量
      array([[ 0.        ,  0.40824829,  0.40824829],
             [ 0.        ,  0.81649658,  0.81649658],
             [ 1.        , -0.40824829, -0.40824829]])

     

     

     6.LU分解

      >>> a=scipy.mat('[1 2 3;0 1 2;2 4 1]')
      >>> a
      matrix([[1, 2, 3],
              [0, 1, 2],
              [2, 4, 1]])
      >>> x,y,z=linalg.lu(a)

      输出结果
      >>> x
      array([[ 0.,  0.,  1.],
             [ 0.,  1.,  0.],
             [ 1.,  0.,  0.]])
      >>> y                                                                                   #L矩阵  

      array([[ 1. ,  0. ,  0. ],
             [ 0. ,  1. ,  0. ],
             [ 0.5, -0. ,  1. ]])
      >>> z                                                                                   #U矩阵
      array([[ 2. ,  4. ,  1. ],
             [ 0. ,  1. ,  2. ],
             [ 0. ,  0. ,  2.5]])

     

     

    7.Cholesky分解

      >>> a=scipy.mat('[16 4 8;4 -5 4;8 -4 22]')
      >>> a
      matrix([[16,  4,  8],
              [ 4, -5,  4],
              [ 8, -4, 22]])
      >>>linalg.cholesky(a)

      输出结果
    Traceback (most recent call last):
      File "<interactive input>", line 1, in <module>
      File "D:Python26libsite-packagesscipylinalgdecomp_cholesky.py", line 66, in cholesky
        c, lower = _cholesky(a, lower=lower, overwrite_a=overwrite_a, clean=True)
      File "D:Python26libsite-packagesscipylinalgdecomp_cholesky.py", line 24, in _cholesky
        raise LinAlgError("%d-th leading minor not positive definite" % info)
    LinAlgError: 2-th leading minor not positive definite

     

     

    8.求解线性方程组

      >>> a=scipy.mat('[2 1 -5 1;1 -3 0 -6;0 2 -1 2;1 4 -7 6]')
      >>> a
      matrix([[ 2,  1, -5,  1],
              [ 1, -3,  0, -6],
              [ 0,  2, -1,  2],
              [ 1,  4, -7,  6]])
      >>> b=scipy.mat('[8;9;-5;0]')
      >>> b
      matrix([[ 8],
              [ 9],
              [-5],
              [ 0]])
      >>> linalg.solve(a,b)

      输出结果
      array([[ 3.],
             [-4.],
             [-1.],
             [ 1.]])

     

     

    学习总结:

      求逆矩阵:linalg.inv(*)

      求行列式的值:linalg.det(*)

      求模:linalg.norm(*)

      求超定方程的最小二乘解:x,y,z=linalg.lstsq(a,b) #x为解

      求特征值和特征向量:x,y=linalg.eig(a,b)  #x为特征值 y为特征向量

      求LU分解:x,y,z=linalg.lu(*)  #y为L分解  z为U分解

      求解线性方程组:linalg.solve(a,b)

      求Cholesky分解:linalg.cholesky(a)

     

    疑问:

      求解Cholesky分解时的输出结果出错?

     

    作者语

      《SciPy Reference Guide》对Scipy的学习很有帮助,但市场上还未出现其中文版。本人英文水平有限,且为非计算机专业,还望世外高人能指点下哪些章节比较实用,本人感激不尽。

  • 相关阅读:
    苹果所有常用证书,appID,Provisioning Profiles配置说明及制作图文教程(精)
    使用tcpdump抓取HTTP包
    android保持在休眠时,后台程序继续运行(让程序获取设备电源锁)
    insert数据时,获取插入数据的id
    Android学习笔记(五五):通知Notification(下)
    apk反编译与android项目代码混淆
    android 解决横竖屏切换时重新载入的问题
    android中往字符串数组动态添加元素
    error 25015安装程序集“C:WindowsMicrosoft .NETFrameworkv2.0.50727xxx.dll”失败,原因是出现了系统错误:另一个程序正在使用此文件,进程无法访问
    win7 安装vs2013后无法连接远程数据库,出现如下提示的解决方法
  • 原文地址:https://www.cnblogs.com/zhilangtaosha/p/5754589.html
Copyright © 2011-2022 走看看