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

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

    • 分享

      NumPy

       imelee 2017-04-10

      本文摘自《用Python做科學(xué)計(jì)算》,版權(quán)歸原作者所有。

      1. NumPy-快速處理數(shù)據(jù)--ndarray對(duì)象--數(shù)組的創(chuàng)建和存取

      2. NumPy-快速處理數(shù)據(jù)--ndarray對(duì)象--多維數(shù)組的存取、結(jié)構(gòu)體數(shù)組存取、內(nèi)存對(duì)齊、Numpy內(nèi)存結(jié)構(gòu)

      3. NumPy-快速處理數(shù)據(jù)--ufunc運(yùn)算--廣播--ufunc方法

      接下來(lái)介紹矩陣運(yùn)算

      Numpy默認(rèn)不使用矩陣運(yùn)算,如果希望對(duì)數(shù)組進(jìn)行矩陣運(yùn)算的話需要調(diào)用相應(yīng)的函數(shù)

      matrix 對(duì)象

      numpy庫(kù)提供了matrix類(lèi),使用matrix類(lèi)創(chuàng)建的是矩陣對(duì)象,它們的加減乘除運(yùn)算缺省采用矩陣方式計(jì)算,因此用法和matlab十分類(lèi)似。但是由于NumPy中同時(shí)存在ndarray和matrix對(duì)象,因此用戶(hù)很容易將兩者弄混。這有違Python的“顯式優(yōu)于隱式”的原則,因此并不推薦在較復(fù)雜的程序中使用matrix。下面是使用matrix的一個(gè)例子:

      復(fù)制代碼
       1 >>> import numpy as np
       2 >>> a = np.matrix([[1,2,3],[5,5,6],[7,9,9]])
       3 >>> a**-1     # a 的逆矩陣
       4 matrix([[-0.6       ,  0.6       , -0.2       ],
       5         [-0.2       , -0.8       ,  0.6       ],
       6         [ 0.66666667,  0.33333333, -0.33333333]])
       7 >>> a * a**-1 # a與a的逆矩陣的乘積,結(jié)果是單位陣
       8 matrix([[  1.00000000e+00,   0.00000000e+00,   0.00000000e+00],
       9         [  4.44089210e-16,   1.00000000e+00,   4.44089210e-16],
      10         [  0.00000000e+00,  -4.44089210e-16,   1.00000000e+00]])
      復(fù)制代碼

      如果不使用matrix 對(duì)象,而把二維數(shù)組看作是矩陣的話,就需要使用dot函數(shù)進(jìn)行計(jì)算。對(duì)于二維數(shù)組,它計(jì)算的是矩陣乘積,對(duì)于一維數(shù)組,它計(jì)算的是其點(diǎn)積。當(dāng)需要將一維數(shù)組當(dāng)作列矢量或者行矢量進(jìn)行矩陣運(yùn)算時(shí),推薦先使用reshape或者shape函數(shù)將一維數(shù)組轉(zhuǎn)換為二維數(shù)組:

      復(fù)制代碼
       1 >>> a = np.array([1, 2, 3])
       2 >>> a.shape#a是一維數(shù)組
       3 (3,)
       4 >>> a.shape = (-1, 1)#使用shape直接修改a的維數(shù)
       5 >>> a
       6 array([[1],
       7        [2],
       8        [3]])
       9 >>> a.reshape(1, -1) #使用reshape也可以,但是他的返回值改變a的shape,而a本身不變
      10 array([[1, 2, 3]])
      11 >>> a
      12 array([[1],
      13        [2],
      14        [3]])
      復(fù)制代碼
      • dot :對(duì)于兩個(gè)一維的數(shù)組,計(jì)算的是這兩個(gè)數(shù)組對(duì)應(yīng)下標(biāo)元素的乘積和(數(shù)學(xué)上稱(chēng)之為內(nèi)積);對(duì)于二維數(shù)組,計(jì)算的是兩個(gè)數(shù)組的矩陣乘積;對(duì)于多維數(shù)組,它的通用計(jì)算公式如下,即結(jié)果數(shù)組中的每個(gè)元素都是:數(shù)組a的最后一維上的所有元素與數(shù)組b的倒數(shù)第二位上的所有元素的乘積和:

      dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m])

      兩個(gè)三維數(shù)組相乘

      復(fù)制代碼
       1 >>> a = np.arange(12).reshape(2,3,2)
       2 >>> a
       3 array([[[ 0,  1],
       4         [ 2,  3],
       5         [ 4,  5]],
       6 
       7        [[ 6,  7],
       8         [ 8,  9],
       9         [10, 11]]])
      10 >>> b = np.arange(12,24).reshape(2,2,3)
      11 >>> b
      12 array([[[12, 13, 14],
      13         [15, 16, 17]],
      14 
      15        [[18, 19, 20],
      16         [21, 22, 23]]])
      17 >>> c = np.dot(a,b)
      18 >>> c
      19 array([[[[ 15,  16,  17],
      20          [ 21,  22,  23]],
      21 
      22         [[ 69,  74,  79],
      23          [ 99, 104, 109]],
      24 
      25         [[123, 132, 141],
      26          [177, 186, 195]]],
      27 
      28 
      29        [[[177, 190, 203],
      30          [255, 268, 281]],
      31 
      32         [[231, 248, 265],
      33          [333, 350, 367]],
      34 
      35         [[285, 306, 327],
      36          [411, 432, 453]]]])
      37 >>> c.shape
      38 (2, 3, 2, 3)
      復(fù)制代碼

      dot乘積的結(jié)果c可以看做是數(shù)組a, b的多個(gè)子矩陣的乘積:

      復(fù)制代碼
      1 >>> np.alltrue( c[0,:,0,:] == np.dot(a[0],b[0]) )
      2 True
      3 >>> np.alltrue( c[1,:,0,:] == np.dot(a[1],b[0]) )
      4 True
      5 >>> np.alltrue( c[0,:,1,:] == np.dot(a[0],b[1]) )
      6 True
      7 >>> np.alltrue( c[1,:,1,:] == np.dot(a[1],b[1]) )
      8 True
      復(fù)制代碼
      • inner : 和dot乘積一樣,對(duì)于兩個(gè)一維數(shù)組,計(jì)算的是這兩個(gè)數(shù)組對(duì)應(yīng)下標(biāo)元素的乘積和;對(duì)于多維數(shù)組,它計(jì)算的結(jié)果數(shù)組中的每個(gè)元素都是:數(shù)組a和b的最后一維的內(nèi)積,因此數(shù)組a和b的最后一維的長(zhǎng)度必須相同:

      1 inner(a, b)[i,j,k,m] = sum(a[i,j,:]*b[k,m,:])
      復(fù)制代碼
       1 >>> a = np.arange(12).reshape(2,3,2)
       2 >>> b = np.arange(12,24).reshape(2,3,2)
       3 >>> c = np.inner(a,b)
       4 >>> c.shape
       5 (2, 3, 2, 3)
       6 >>> c[0,0,0,0] == np.inner(a[0,0],b[0,0])
       7 True
       8 >>> c[0,1,1,0] == np.inner(a[0,1],b[1,0])
       9 True
      10 >>> c[1,2,1,2] == np.inner(a[1,2],b[1,2])
      11 True
      復(fù)制代碼
      • outer : 只按照一維數(shù)組進(jìn)行計(jì)算,如果傳入?yún)?shù)是多維數(shù)組,則先將此數(shù)組展平為一維數(shù)組之后再進(jìn)行運(yùn)算。outer乘積計(jì)算的列向量和行向量的矩陣乘積:

      1 >>> np.outer([1,2,3],[4,5,6,7])
      2 array([[ 4,  5,  6,  7],
      3        [ 8, 10, 12, 14],
      4        [12, 15, 18, 21]])

      矩陣中更高級(jí)的一些運(yùn)算可以在NumPy的線性代數(shù)子庫(kù)linalg中找到。例如inv函數(shù)計(jì)算逆矩陣,solve函數(shù)可以求解多元一次方程組。下面是solve函數(shù)的一個(gè)例子:

      1 >>> a = np.random.rand(10,10)
      2 >>> b = np.random.rand(10)
      3 >>> x = np.linalg.solve(a,b)

      solve函數(shù)有兩個(gè)參數(shù)a和b。a是一個(gè)N*N的二維數(shù)組,而b是一個(gè)長(zhǎng)度為N的一維數(shù)組,solve函數(shù)找到一個(gè)長(zhǎng)度為N的一維數(shù)組x,使得a和x的矩陣乘積正好等于b,數(shù)組x就是多元一次方程組的解。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(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)遵守用戶(hù) 評(píng)論公約

        類(lèi)似文章 更多