乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      NumPy的矩陣和線性代數(shù)

       imelee 2017-05-24

      內(nèi)容索引

      1. 矩陣 --- mat函數(shù)

      2. 線性代數(shù) --- numpy.linalg中的逆矩陣函數(shù)inv函數(shù)、行列式det函數(shù)、求解線性方程組的solve函數(shù)、內(nèi)積dot函數(shù)、特征分解eigvals函數(shù)、eig函數(shù)、奇異值分解svd函數(shù)、廣義逆矩陣的pinv函數(shù)


      In [1]:

      import numpy as np


      1. 矩陣


      在NumP中,矩陣是ndarray的子類,可以由專用的字符串格式來創(chuàng)建。我們可以使用mat、matrix、以及bmat函數(shù)來創(chuàng)建矩陣。


      1.1 創(chuàng)建矩陣


      mat函數(shù)創(chuàng)建矩陣時(shí),若輸入已經(jīng)為matrix或ndarray對(duì)象,則不會(huì)為它們創(chuàng)建副本。因此,調(diào)用mat函數(shù)和調(diào)用matrix(data, copy=False)等價(jià)。


      在創(chuàng)建矩陣的專用字符串中,矩陣的行與行之間用分號(hào)隔開,行內(nèi)的元素之間用空格隔開。


      In [2]:

      A = np.mat("1 2 3; 4 5 6; 7 8 9")

      print"Creation from string:\n", A

      Creation from string:

      [[1 2 3]

       [4 5 6]

       [7 8 9]]


      In [3]:

      # 轉(zhuǎn)置

      print"Transpose A :\n", A.T


      # 逆矩陣

      print"Inverse A :\n", A.I

      Transpose A :

      [[1 4 7]

       [2 5 8]

       [3 6 9]]

      Inverse A :

      [[ -4.50359963e+15   9.00719925e+15  -4.50359963e+15]

       [  9.00719925e+15  -1.80143985e+16   9.00719925e+15]

       [ -4.50359963e+15   9.00719925e+15  -4.50359963e+15]]


      In [4]:

      # 通過NumPy數(shù)組創(chuàng)建矩陣

      print"Creation from array: \n", np.mat(np.arange(9).reshape(3,3))

      Creation from array: 

      [[0 1 2]

       [3 4 5]

       [6 7 8]]


      1.2 從已有矩陣創(chuàng)建新矩陣


      我們可以利用一些已有的較小的矩陣來創(chuàng)建一個(gè)新的大矩陣。用bmat函數(shù)來實(shí)現(xiàn)。


      In [5]:

      A = np.eye(2)

      print"A:\n", A


      B = 2 * A

      print"B:\n", B


      # 使用字符串創(chuàng)建復(fù)合矩陣

      print"Compound matrix:\n", np.bmat("A B")

      print"Compound matrix:\n", np.bmat("A B; B A")

      A:

      [[ 1.  0.]

       [ 0.  1.]]

      B:

      [[ 2.  0.]

       [ 0.  2.]]

      Compound matrix:

      [[ 1.  0.  2.  0.]

       [ 0.  1.  0.  2.]]

      Compound matrix:

      [[ 1.  0.  2.  0.]

       [ 0.  1.  0.  2.]

       [ 2.  0.  1.  0.]

       [ 0.  2.  0.  1.]]


      2. 線性代數(shù)


      線性代數(shù)是數(shù)學(xué)的一個(gè)重要分支。numpy.linalg模塊包含線性代數(shù)的函數(shù)。使用這個(gè)模塊,我們可以計(jì)算逆矩陣、求特征值、解線性方程組以及求解行列式。


      2.1 計(jì)算逆矩陣


      使用inv函數(shù)計(jì)算逆矩陣。


      In [6]:

      A = np.mat("0 1 2; 1 0 3; 4 -3 8")

      print"A:\n", A

      inverse = np.linalg.inv(A)

      print"inverse of A:\n", inverse


      print"check inverse:\n", inverse * A

      A:

      [[ 0  1  2]

       [ 1  0  3]

       [ 4 -3  8]]

      inverse of A:

      [[-4.5  7.  -1.5]

       [-2.   4.  -1. ]

       [ 1.5 -2.   0.5]]

      check inverse:

      [[ 1.  0.  0.]

       [ 0.  1.  0.]

       [ 0.  0.  1.]]


      2.2 行列式


      行列式是與方陣相關(guān)的一個(gè)標(biāo)量值。對(duì)于一個(gè)n*n的實(shí)數(shù)矩陣,行列式描述的是一個(gè)線性變換對(duì)“有向體積”所造成的影響。行列式的值為正,表示保持了空間的定向(順時(shí)針或逆時(shí)針),為負(fù)表示顛倒空間的定向。numpy.linalg模塊中的det函數(shù)可以計(jì)算矩陣的行列式。


      In [7]:

      A = np.mat("3 4; 5 6")

      print"A:\n", A


      print"Determinant:\n", np.linalg.det(A)

      A:

      [[3 4]

       [5 6]]

      Determinant:

      -2.0


      2.3 求解線性方程組


      矩陣可以對(duì)向量進(jìn)行線性變換,這對(duì)應(yīng)于數(shù)學(xué)中的線性方程組。solve函數(shù)可以求解形如Ax = b的線性方程組,其中A是矩陣,b是一維或二維的數(shù)組,x是未知變量。


      In [8]:

      A = np.mat("1 -2 1; 0 2 -8; -4 5 9")

      print"A:\n", A

      b = np.array([0,8,-9])

      print"b:\n", b

      A:

      [[ 1 -2  1]

       [ 0  2 -8]

       [-4  5  9]]

      b:

      [ 0  8 -9]


      In [9]:

      x = np.linalg.solve(A, b)

      print"Solution:\n", x


      # check

      print"Check:\n",b == np.dot(A, x)

      print np.dot(A, x)

      Solution:

      [ 29.  16.   3.]

      Check:

      [[ True  True  True]]

      [[ 0.  8. -9.]]


      2.4 特征值和特征向量


      特征值(eigenvalue)即方程Ax = ax的根,是一個(gè)標(biāo)量。其中,A是一個(gè)二維矩陣,x是一個(gè)一維向量。特征向量(eigenvector)是關(guān)于特征值的向量。在numpy.linalg模塊中,eigvals函數(shù)可以計(jì)算矩陣的特征值,而eig函數(shù)可以返回一個(gè)包含特征值和對(duì)應(yīng)特征向量的元組。


      In [10]:

      A = np.mat("3 -2; 1 0")

      print"A:\n", A


      print"Eigenvalues:\n", np.linalg.eigvals(A)


      eigenvalues, eigenvectors = np.linalg.eig(A)

      print"Eigenvalues:\n", eigenvalues

      print"Eigenvectors:\n", eigenvectors

      A:

      [[ 3 -2]

       [ 1  0]]

      Eigenvalues:

      [ 2.  1.]

      Eigenvalues:

      [ 2.  1.]

      Eigenvectors:

      [[ 0.89442719  0.70710678]

       [ 0.4472136   0.70710678]]


      In [11]:

      # check

      # 計(jì)算 Ax = ax的左右兩部分的值

      for i in range(len(eigenvalues)):

          print"Left:\n", np.dot(A, eigenvectors[:,i])

          print"Right:\n", np.dot(eigenvalues[i], eigenvectors[:,i])

          print

      Left:

      [[ 1.78885438]

       [ 0.89442719]]

      Right:

      [[ 1.78885438]

       [ 0.89442719]]


      Left:

      [[ 0.70710678]

       [ 0.70710678]]

      Right:

      [[ 0.70710678]

       [ 0.70710678]]


      2.5 奇異值分解


      SVD(Singular Value Decomposition,奇異值分解)是一種因子分解運(yùn)算,將一個(gè)矩陣分解為3個(gè)矩陣的乘積。奇異值分解是特征值分解的一種推廣。


      在numpy.linalg模塊中的svd函數(shù)可以對(duì)矩陣進(jìn)行奇異值分解。該函數(shù)返回3個(gè)矩陣——U、Sigma和V,其中U和V是正交矩陣,Sigma包含輸入矩陣的奇異值。


      In [12]:

      from IPython.display import Latex

      Latex(r"$M=U \Sigma V^*$")

      Out[12]:

      M=UΣV?M=UΣV?

      *號(hào)表示共軛轉(zhuǎn)置


      In [13]:

      A = np.mat("4 11 14;8 7 -2")

      print"A:\n", A


      U, Sigma, V = np.linalg.svd(A, full_matrices=False)

      print"U:\n", U

      print"Sigma:\n", Sigma

      print"V:\n", V

      A:

      [[ 4 11 14]

       [ 8  7 -2]]

      U:

      [[-0.9486833  -0.31622777]

       [-0.31622777  0.9486833 ]]

      Sigma:

      [ 18.97366596   9.48683298]

      V:

      [[-0.33333333 -0.66666667 -0.66666667]

       [ 0.66666667  0.33333333 -0.66666667]]


      In [14]:

      # Sigma矩陣是奇異值矩陣對(duì)角線上的值

      np.diag(Sigma)

      Out[14]:

      array([[ 18.97366596,   0.        ],

             [  0.        ,   9.48683298]])


      In [17]:

      # check

      M = U*np.diag(Sigma)*V

      print"Product:\n", M

      Product:

      [[  4.  11.  14.]

       [  8.   7.  -2.]]


      2.6 廣義逆矩陣


      廣義逆矩陣可以使用numpy.linalg模塊中的pinv函數(shù)進(jìn)行求解。inv函數(shù)只接受方陣作為輸入矩陣,而pinv函數(shù)沒有這個(gè)限制。


      In [18]:

      A = np.mat("4 11 14; 8 7 -2")

      print"A:\n", A

      A:

      [[ 4 11 14]

       [ 8  7 -2]]


      In [19]:

      pseudoinv = np.linalg.pinv(A)

      print"Pseudo inverse:\n", pseudoinv

      Pseudo inverse:

      [[-0.00555556  0.07222222]

       [ 0.02222222  0.04444444]

       [ 0.05555556 -0.05555556]]


      In [20]:

      # check

      print"Check pseudo inverse:\n", A*pseudoinv

      Check pseudo inverse:

      [[  1.00000000e+00   0.00000000e+00]

       [  8.32667268e-17   1.00000000e+00]]


      得到的結(jié)果并非嚴(yán)格意義上的單位矩陣,但是非常近似。


      In [21]:

      A = np.mat("0 1 2; 1 0 3; 4 -3 8")

      print"A:\n", A

      inverse = np.linalg.inv(A)

      print"inverse of A:\n", inverse

      print"check inverse:\n", inverse * A


      pseudoinv = np.linalg.pinv(A)

      print"Pseudo inverse:\n", pseudoinv

      print"Check pseudo inverse:\n", A*pseudoinv

      A:

      [[ 0  1  2]

       [ 1  0  3]

       [ 4 -3  8]]

      inverse of A:

      [[-4.5  7.  -1.5]

       [-2.   4.  -1. ]

       [ 1.5 -2.   0.5]]

      check inverse:

      [[ 1.  0.  0.]

       [ 0.  1.  0.]

       [ 0.  0.  1.]]

      Pseudo inverse:

      [[-4.5  7.  -1.5]

       [-2.   4.  -1. ]

       [ 1.5 -2.   0.5]]

      Check pseudo inverse:

      [[  1.00000000e+00  -2.66453526e-15   8.88178420e-16]

       [  8.88178420e-16   1.00000000e+00   2.22044605e-16]

       [  0.00000000e+00   3.55271368e-15   1.00000000e+00]]




        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多