<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          最全的NumPy教程

          共 23581字,需瀏覽 48分鐘

           ·

          2020-12-20 08:32


          譯者:飛龍

          譯文:https://www.jianshu.com/p/57e3c0a92f3a

          原文:https://www.tutorialspoint.com/numpy/index.htm

          NumPy - 簡介

          NumPy 是一個 Python 包。它代表 “Numeric Python”。它是一個由多維數(shù)組對象和用于處理數(shù)組的例程集合組成的庫。


          Numeric,即 NumPy 的前身,是由 Jim Hugunin 開發(fā)的。也開發(fā)了另一個包 Numarray ,它擁有一些額外的功能。2005年,Travis Oliphant 通過將 Numarray 的功能集成到 Numeric 包中來創(chuàng)建 NumPy 包。這個開源項目有很多貢獻者。


          NumPy 操作


          使用NumPy,開發(fā)人員可以執(zhí)行以下操作:


          • 數(shù)組的算數(shù)和邏輯運算。

          • 傅立葉變換和用于圖形操作的例程。

          • 與線性代數(shù)有關(guān)的操作。NumPy 擁有線性代數(shù)和隨機數(shù)生成的內(nèi)置函數(shù)。


          NumPy – MatLab 的替代之一


          NumPy 通常與 SciPy(Scientific Python)和 Matplotlib(繪圖庫)一起使用。這種組合廣泛用于替代 MatLab,是一個流行的技術(shù)計算平臺。但是,Python 作為 MatLab 的替代方案,現(xiàn)在被視為一種更加現(xiàn)代和完整的編程語言。


          NumPy 是開源的,這是它的一個額外的優(yōu)勢。


          NumPy - 環(huán)境


          在線嘗試


          我們已經(jīng)在線設(shè)置了 NumPy 編程環(huán)境,以便在線編譯和執(zhí)行所有可用的示例。它向你提供了信心,并使您能夠使用不同的選項驗證程序, 隨意修改任何示例并在線執(zhí)行。


          使用我們的在線編譯器嘗試一下示例,它位于 CodingGround

          https://www.tutorialspoint.com/codingground.htm

          import numpy as np  
          a =  'hello world'  
          print a

          對于本教程中給出的大多數(shù)示例,你會在我們的網(wǎng)站代碼部分的右上角找到一個Try it選項,這會把你帶到在線編譯器。所以快來使用它,享受你的學(xué)習(xí)吧。


          標(biāo)準(zhǔn)的 Python 發(fā)行版不會與 NumPy 模塊捆綁在一起。一個輕量級的替代方法是使用流行的 Python 包安裝程序 pip 來安裝 NumPy。

          pip install numpy

          啟用 NumPy 的最佳方法是使用特定于您的操作系統(tǒng)的可安裝的二進制包。這些二進制包含完整的 SciPy 技術(shù)棧(包括 NumPy,SciPy,matplotlib,IPython,SymPy 以及 Python 核心自帶的其它包)。


          NumPy - Ndarray 對象


          NumPy 中定義的最重要的對象是稱為 ndarray 的 N 維數(shù)組類型。它描述相同類型的元素集合。可以使用基于零的索引訪問集合中的項目。


          ndarray中的每個元素在內(nèi)存中使用相同大小的塊。 ndarray中的每個元素是數(shù)據(jù)類型對象的對象(稱為 dtype)。


          ndarray對象提取的任何元素(通過切片)由一個數(shù)組標(biāo)量類型的 Python 對象表示。下圖顯示了ndarray,數(shù)據(jù)類型對象(dtype)和數(shù)組標(biāo)量類型之間的關(guān)系。


          ndarray類的實例可以通過本教程后面描述的不同的數(shù)組創(chuàng)建例程來構(gòu)造。基本的ndarray是使用 NumPy 中的數(shù)組函數(shù)創(chuàng)建的,如下所示:

          numpy.array

          它從任何暴露數(shù)組接口的對象,或從返回數(shù)組的任何方法創(chuàng)建一個ndarray。

          numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

          上面的構(gòu)造器接受以下參數(shù):


          序號 參數(shù)及描述
          1. object 任何暴露數(shù)組接口方法的對象都會返回一個數(shù)組或任何(嵌套)序列。
          2. dtype 數(shù)組的所需數(shù)據(jù)類型,可選。
          3. copy 可選,默認(rèn)為true,對象是否被復(fù)制。
          4. order C(按行)、F(按列)或A(任意,默認(rèn))。
          5. subok 默認(rèn)情況下,返回的數(shù)組被強制為基類數(shù)組。如果為true,則返回子類。
          6. ndimin 指定返回數(shù)組的最小維數(shù)。

          看看下面的例子來更好地理解。

          示例 1

          import numpy as np 
          a = np.array([1,2,3])  
          print a

          輸出如下:

          [1, 2, 3]

          示例 2

          # 多于一個維度  
          import numpy as np
          a = np.array([[1,  2],  [3,  4]])  
          print a

          輸出如下:

          [[1, 2] 
          [3, 4]]

          示例 3

          # 最小維度  
          import numpy as np
          a = np.array([1,  2,  3,4,5], ndmin =  2)  
          print a

          輸出如下:

          [[1, 2, 3, 4, 5]]

          示例 4

          # dtype 參數(shù)  
          import numpy as np
          a = np.array([1,  2,  3], dtype = complex)  
          print a

          輸出如下:

          [ 1.+0.j,  2.+0.j,  3.+0.j]
          **ndarray ** 對象由計算機內(nèi)存中的一維連續(xù)區(qū)域組成,帶有將每個元素映射到內(nèi)存塊中某個位置的索引方案。內(nèi)存塊以按行(C 風(fēng)格)或按列(FORTRAN 或 MatLab 風(fēng)格)的方式保存元素。

          NumPy - 數(shù)據(jù)類型

          NumPy 支持比 Python 更多種類的數(shù)值類型。下表顯示了 NumPy 中定義的不同標(biāo)量數(shù)據(jù)類型。


          序號 數(shù)據(jù)類型及描述
          1. bool_ 存儲為一個字節(jié)的布爾值(真或假)
          2. int_ 默認(rèn)整數(shù),相當(dāng)于 C 的long,通常為int32int64
          3. intc 相當(dāng)于 C 的int,通常為int32int64
          4. intp 用于索引的整數(shù),相當(dāng)于 C 的size_t,通常為int32int64
          5. int8 字節(jié)(-128 ~ 127)
          6. int16 16 位整數(shù)(-32768 ~ 32767)
          7. int32 32 位整數(shù)(-2147483648 ~ 2147483647)
          8. int64 64 位整數(shù)(-9223372036854775808 ~ 9223372036854775807)
          9. uint8 8 位無符號整數(shù)(0 ~ 255)
          10. uint16 16 位無符號整數(shù)(0 ~ 65535)
          11. uint32 32 位無符號整數(shù)(0 ~ 4294967295)
          12. uint64 64 位無符號整數(shù)(0 ~ 18446744073709551615)
          13. float_ float64的簡寫
          14. float16 半精度浮點:符號位,5 位指數(shù),10 位尾數(shù)
          15. float32 單精度浮點:符號位,8 位指數(shù),23 位尾數(shù)
          16. float64 雙精度浮點:符號位,11 位指數(shù),52 位尾數(shù)
          17. complex_ complex128的簡寫
          18. complex64 復(fù)數(shù),由兩個 32 位浮點表示(實部和虛部)
          19. complex128 復(fù)數(shù),由兩個 64 位浮點表示(實部和虛部)

          NumPy 數(shù)字類型是dtype(數(shù)據(jù)類型)對象的實例,每個對象具有唯一的特征。這些類型可以是np.bool_np.float32等。


          數(shù)據(jù)類型對象 (dtype)


          數(shù)據(jù)類型對象描述了對應(yīng)于數(shù)組的固定內(nèi)存塊的解釋,取決于以下方面:


          • 數(shù)據(jù)類型(整數(shù)、浮點或者 Python 對象)

          • 數(shù)據(jù)大小

          • 字節(jié)序(小端或大端)

          • 在結(jié)構(gòu)化類型的情況下,字段的名稱,每個字段的數(shù)據(jù)類型,和每個字段占用的內(nèi)存塊部分。

          • 如果數(shù)據(jù)類型是子序列,它的形狀和數(shù)據(jù)類型。


          字節(jié)順序取決于數(shù)據(jù)類型的前綴<>。 <意味著編碼是小端(最小有效字節(jié)存儲在最小地址中)。 >意味著編碼是大端(最大有效字節(jié)存儲在最小地址中)。

          dtype可由一下語法構(gòu)造:

          numpy.dtype(object, align, copy)

          參數(shù)為:


          • Object:被轉(zhuǎn)換為數(shù)據(jù)類型的對象。

          • Align:如果為true,則向字段添加間隔,使其類似 C 的結(jié)構(gòu)體。

          • Copy:生成dtype對象的新副本,如果為flase,結(jié)果是內(nèi)建數(shù)據(jù)類型對象的引用。


          示例 1

          # 使用數(shù)組標(biāo)量類型  
          import numpy as np
          dt = np.dtype(np.int32)  
          print dt

          輸出如下:

          int32

          示例 2

          #int8,int16,int32,int64 可替換為等價的字符串 'i1','i2','i4',以及其他。 
          import numpy as np

          dt = np.dtype('i4')  
          print dt

          輸出如下:

          int32

          示例 3

          # 使用端記號  
          import numpy as np
          dt = np.dtype('>i4')  
          print dt

          輸出如下:

          >i4

          下面的例子展示了結(jié)構(gòu)化數(shù)據(jù)類型的使用。這里聲明了字段名稱和相應(yīng)的標(biāo)量數(shù)據(jù)類型。

          示例 4

          # 首先創(chuàng)建結(jié)構(gòu)化數(shù)據(jù)類型。 
          import numpy as np
          dt = np.dtype([('age',np.int8)])  
          print dt

          輸出如下:

          [('age', 'i1')]

          示例 5

          # 現(xiàn)在將其應(yīng)用于 ndarray 對象  
          import numpy as np

          dt = np.dtype([('age',np.int8)])
          a = np.array([(10,),(20,),(30,)], dtype = dt)  
          print a

          輸出如下:

          [(10,) (20,) (30,)]

          示例 6

          # 文件名稱可用于訪問 age 列的內(nèi)容  
          import numpy as np

          dt = np.dtype([('age',np.int8)])
          a = np.array([(10,),(20,),(30,)], dtype = dt)  
          print a['age']

          輸出如下:

          [10 20 30]

          示例 7

          以下示例定義名為 student 的結(jié)構(gòu)化數(shù)據(jù)類型,其中包含字符串字段name整數(shù)字段age浮點字段marks。此dtype應(yīng)用于ndarray對象。

          import numpy as np 
          student = np.dtype([('name','S20'),  ('age',  'i1'),  ('marks',  'f4')])  
          print student

          輸出如下:

          [('name', 'S20'), ('age', 'i1'), ('marks', '
               )]

          示例 8

          import numpy as np 

          student = np.dtype([('name','S20'),  ('age',  'i1'),  ('marks',  'f4')])
          a = np.array([('abc',  21,  50),('xyz',  18,  75)], dtype = student)  
          print a

          輸出如下:

          [('abc', 21, 50.0), ('xyz', 18, 75.0)]

          每個內(nèi)建類型都有一個唯一定義它的字符代碼:

          • 'b':布爾值

          • 'i':符號整數(shù)

          • 'u':無符號整數(shù)

          • 'f':浮點

          • 'c':復(fù)數(shù)浮點

          • 'm':時間間隔

          • 'M':日期時間

          • 'O':Python 對象

          • 'S', 'a':字節(jié)串

          • 'U':Unicode

          • 'V':原始數(shù)據(jù)(void


          NumPy - 數(shù)組屬性


          這一章中,我們會討論 NumPy 的多種數(shù)組屬性。

          ndarray.shape

          這一數(shù)組屬性返回一個包含數(shù)組維度的元組,它也可以用于調(diào)整數(shù)組大小。

          示例 1

          import numpy as np 
          a = np.array([[1,2,3],[4,5,6]])  
          print a.shape

          輸出如下:

          (2, 3)

          示例 2

          NumPy 也提供了reshape函數(shù)來調(diào)整數(shù)組大小。

          import numpy as np 
          a = np.array([[1,2,3],[4,5,6]])
          b = a.reshape(3,2)  
          print b

          輸出如下:

          [[1, 2] 
          [3, 4]
          [5, 6]]

          NumPy - 切片和索引

          ndarray對象的內(nèi)容可以通過索引或切片來訪問和修改,就像 Python 的內(nèi)置容器對象一樣。


          如前所述,ndarray對象中的元素遵循基于零的索引。有三種可用的索引方法類型:字段訪問,基本切片高級索引


          基本切片是 Python 中基本切片概念到 n 維的擴展。通過將startstopstep參數(shù)提供給內(nèi)置的slice函數(shù)來構(gòu)造一個 Python slice對象。此slice對象被傳遞給數(shù)組來提取數(shù)組的一部分。

          示例 1

          import numpy as np
          a = np.arange(10)
          s = slice(2,7,2)  
          print a[s]

          輸出如下:

          [2  4  6]

          在上面的例子中,ndarray對象由arange()函數(shù)創(chuàng)建。然后,分別用起始,終止和步長值272定義切片對象。當(dāng)這個切片對象傳遞給ndarray時,會對它的一部分進行切片,從索引27,步長為2

          通過將由冒號分隔的切片參數(shù)(start:stop:step)直接提供給ndarray對象,也可以獲得相同的結(jié)果。

          示例 2

          import numpy as np
          a = np.arange(10)
          b = a[2:7:2]  
          print b

          輸出如下:

          [2  4  6]

          如果只輸入一個參數(shù),則將返回與索引對應(yīng)的單個項目。如果使用a:,則從該索引向后的所有項目將被提取。如果使用兩個參數(shù)(以:分隔),則對兩個索引(不包括停止索引)之間的元素以默認(rèn)步驟進行切片。


          NumPy - 高級索引


          如果一個ndarray是非元組序列,數(shù)據(jù)類型為整數(shù)或布爾值的ndarray,或者至少一個元素為序列對象的元組,我們就能夠用它來索引ndarray。高級索引始終返回數(shù)據(jù)的副本。與此相反,切片只提供了一個視圖。


          有兩種類型的高級索引:整數(shù)和布爾值。


          整數(shù)索引


          這種機制有助于基于 N 維索引來獲取數(shù)組中任意元素。每個整數(shù)數(shù)組表示該維度的下標(biāo)值。當(dāng)索引的元素個數(shù)就是目標(biāo)ndarray的維度時,會變得相當(dāng)直接。

          以下示例獲取了ndarray對象中每一行指定列的一個元素。因此,行索引包含所有行號,列索引指定要選擇的元素。


          示例

          import numpy as np 
          x = np.array([[  0,  1,  2],[  3,  4,  5],[  6,  7,  8],[  9,  10,  11]])  
          print  '我們的數(shù)組是:'  
          print x
          print  '\n'  
          # 切片
          z = x[1:4,1:3]  
          print  '切片之后,我們的數(shù)組變?yōu)椋?  
          print z
          print  '\n'  
          # 對列使用高級索引
          y = x[1:4,[1,2]]
          print  '對列使用高級索引來切片:'  
          print y

          輸出如下:

          我們的數(shù)組是:
          [[ 0  1  2]
          [ 3  4  5]
          [ 6  7  8]
          [ 9 10 11]]
          切片之后,我們的數(shù)組變?yōu)椋?br>[[ 4  5]
          [ 7  8]
          [10 11]]
          對列使用高級索引來切片:
          [[ 4  5]
          [ 7  8]
          [10 11]]

          布爾索引

          當(dāng)結(jié)果對象是布爾運算(例如比較運算符)的結(jié)果時,將使用此類型的高級索引。

          示例

          這個例子中,大于 5 的元素會作為布爾索引的結(jié)果返回。

          import numpy as np 
          x = np.array([[  0,  1,  2],[  3,  4,  5],[  6,  7,  8],[  9,  10,  11]])  
          print  '我們的數(shù)組是:'  
          print x
          print  '\n'  
          # 現(xiàn)在我們會打印出大于 5 的元素  
          print  '大于 5 的元素是:'  
          print x[x >  5]

          輸出如下:

          我們的數(shù)組是:
          [[ 0  1  2]
          [ 3  4  5]
          [ 6  7  8]
          [ 9 10 11]]
          大于 5 的元素是:
          [ 6  7  8  9 10 11]

          NumPy - 廣播

          術(shù)語廣播是指 NumPy 在算術(shù)運算期間處理不同形狀的數(shù)組的能力。對數(shù)組的算術(shù)運算通常在相應(yīng)的元素上進行。如果兩個陣列具有完全相同的形狀,則這些操作被無縫執(zhí)行。

          示例

          import numpy as np 

          a = np.array([1,2,3,4])
          b = np.array([10,20,30,40])
          c = a * b
          print c

          輸出如下:

          [10   40   90   160]

          如果兩個數(shù)組的維數(shù)不相同,則元素到元素的操作是不可能的。然而,在 NumPy 中仍然可以對形狀不相似的數(shù)組進行操作,因為它擁有廣播功能。較小的數(shù)組會廣播到較大數(shù)組的大小,以便使它們的形狀可兼容。

          如果滿足以下規(guī)則,可以進行廣播:


          • ndim較小的數(shù)組會在前面追加一個長度為 1 的維度。

          • 輸出數(shù)組的每個維度的大小是輸入數(shù)組該維度大小的最大值。

          • 如果輸入在每個維度中的大小與輸出大小匹配,或其值正好為 1,則在計算中可它。

          • 如果輸入的某個維度大小為 1,則該維度中的第一個數(shù)據(jù)元素將用于該維度的所有計算。


          如果上述規(guī)則產(chǎn)生有效結(jié)果,并且滿足以下條件之一,那么數(shù)組被稱為可廣播的


          • 數(shù)組擁有相同形狀。

          • 數(shù)組擁有相同的維數(shù),每個維度擁有相同長度,或者長度為 1。

          • 數(shù)組擁有極少的維度,可以在其前面追加長度為 1 的維度,使上述條件成立。


          NumPy - 數(shù)組上的迭代


          NumPy 包包含一個迭代器對象numpy.nditer。它是一個有效的多維迭代器對象,可以用于在數(shù)組上進行迭代。數(shù)組的每個元素可使用 Python 的標(biāo)準(zhǔn)Iterator接口來訪問。


          讓我們使用arange()函數(shù)創(chuàng)建一個 3X4 數(shù)組,并使用nditer對它進行迭代。

          示例

          import numpy as np
          a = np.arange(0,60,5)
          a = a.reshape(3,4)  
          print  '原始數(shù)組是:'  
          print a print  '\n'  
          print  '修改后的數(shù)組是:'  
          for x in np.nditer(a):  
             print x,

          輸出如下:

          原始數(shù)組是:
          [[ 0 5 10 15]
          [20 25 30 35]
          [40 45 50 55]]
          修改后的數(shù)組是:
          0 5 10 15 20 25 30 35 40 45 50 55

          NumPy - 數(shù)組操作


          NumPy包中有幾個例程用于處理ndarray對象中的元素。它們可以分為以下類型:


          修改形狀


          序號 形狀及描述
          1. reshape 不改變數(shù)據(jù)的條件下修改形狀
          2. flat 數(shù)組上的一維迭代器
          3. flatten 返回折疊為一維的數(shù)組副本
          4. ravel 返回連續(xù)的展開數(shù)組

          numpy.reshape

          這個函數(shù)在不改變數(shù)據(jù)的條件下修改形狀,它接受如下參數(shù):

          numpy.reshape(arr, newshape, order)

          其中:

          • arr:要修改形狀的數(shù)組

          • newshape:整數(shù)或者整數(shù)數(shù)組,新的形狀應(yīng)當(dāng)兼容原有形狀

          • order'C'為 C 風(fēng)格順序,'F'為 F 風(fēng)格順序,'A'為保留原順序。

          例子

          import numpy as np
          a = np.arange(8)
          print '原始數(shù)組:'
          print a
          print '\n'
          b = a.reshape(4,2)
          print '修改后的數(shù)組:'
          print b

          輸出如下:

          原始數(shù)組:
          [0 1 2 3 4 5 6 7]

          修改后的數(shù)組:
          [[0 1]
          [2 3]
          [4 5]
          [6 7]]

          numpy.ndarray.flat

          該函數(shù)返回數(shù)組上的一維迭代器,行為類似 Python 內(nèi)建的迭代器。

          例子

          import numpy as np 
          a = np.arange(8).reshape(2,4)
          print '原始數(shù)組:'
          print a
          print '\n'
          print '調(diào)用 flat 函數(shù)之后:'
          # 返回展開數(shù)組中的下標(biāo)的對應(yīng)元素
          print a.flat[5]

          輸出如下:

          原始數(shù)組:
          [[0 1 2 3]
          [4 5 6 7]]
          調(diào)用 flat 函數(shù)之后:
          5

          numpy.ndarray.flatten

          該函數(shù)返回折疊為一維的數(shù)組副本,函數(shù)接受下列參數(shù):

          ndarray.flatten(order)

          其中:

          • order'C' -- 按行,'F' -- 按列,'A' -- 原順序,'k' -- 元素在內(nèi)存中的出現(xiàn)順序。

          例子

          import numpy as np 
          a = np.arange(8).reshape(2,4)

          print '原數(shù)組:'
          print a
          print '\n'  
          # default is column-major
          print '展開的數(shù)組:'
          print a.flatten()
          print '\n'  
          print '以 F 風(fēng)格順序展開的數(shù)組:'
          print a.flatten(order = 'F')

          輸出如下:

          原數(shù)組:
          [[0 1 2 3]
          [4 5 6 7]]
          展開的數(shù)組:
          [0 1 2 3 4 5 6 7]
          以 F 風(fēng)格順序展開的數(shù)組:
          [0 4 1 5 2 6 3 7]

          numpy.ravel

          這個函數(shù)返回展開的一維數(shù)組,并且按需生成副本。返回的數(shù)組和輸入數(shù)組擁有相同數(shù)據(jù)類型。這個函數(shù)接受兩個參數(shù)。

          numpy.ravel(a, order)

          構(gòu)造器接受下列參數(shù):

          • order'C' -- 按行,'F' -- 按列,'A' -- 原順序,'k' -- 元素在內(nèi)存中的出現(xiàn)順序。

          例子

          import numpy as np 
          a = np.arange(8).reshape(2,4)

          print '原數(shù)組:'
          print a
          print '\n'  
          print '調(diào)用 ravel 函數(shù)之后:'
          print a.ravel()  
          print '\n'
          print '以 F 風(fēng)格順序調(diào)用 ravel 函數(shù)之后:'
          print a.ravel(order = 'F')

          輸出如下:

          原數(shù)組:
          [[0 1 2 3]
          [4 5 6 7]]

          調(diào)用 ravel 函數(shù)之后:
          [0 1 2 3 4 5 6 7]

          以 F 風(fēng)格順序調(diào)用 ravel 函數(shù)之后:
          [0 4 1 5 2 6 3 7]

          翻轉(zhuǎn)操作

          序號 操作及描述
          1. transpose 翻轉(zhuǎn)數(shù)組的維度
          2. ndarray.T 和self.transpose()相同
          3. rollaxis 向后滾動指定的軸
          4. swapaxes 互換數(shù)組的兩個軸

          修改維度

          序號 維度和描述
          1. broadcast 產(chǎn)生模仿廣播的對象
          2. broadcast_to 將數(shù)組廣播到新形狀
          3. expand_dims 擴展數(shù)組的形狀
          4. squeeze 從數(shù)組的形狀中刪除單維條目

          數(shù)組的連接

          序號 數(shù)組及描述
          1. concatenate 沿著現(xiàn)存的軸連接數(shù)據(jù)序列
          2. stack 沿著新軸連接數(shù)組序列
          3. hstack 水平堆疊序列中的數(shù)組(列方向)
          4. vstack 豎直堆疊序列中的數(shù)組(行方向)

          數(shù)組分割

          序號 數(shù)組及操作
          1. split 將一個數(shù)組分割為多個子數(shù)組
          2. hsplit 將一個數(shù)組水平分割為多個子數(shù)組(按列)
          3. vsplit 將一個數(shù)組豎直分割為多個子數(shù)組(按行)

          添加/刪除元素

          序號 元素及描述
          1. resize 返回指定形狀的新數(shù)組
          2. append 將值添加到數(shù)組末尾
          3. insert 沿指定軸將值插入到指定下標(biāo)之前
          4. delete 返回刪掉某個軸的子數(shù)組的新數(shù)組
          5. unique 尋找數(shù)組內(nèi)的唯一元素


          NumPy - 位操作


          下面是 NumPy 包中可用的位操作函數(shù)。

          序號 操作及描述
          1. bitwise_and 對數(shù)組元素執(zhí)行位與操作
          2. bitwise_or 對數(shù)組元素執(zhí)行位或操作
          3. invert 計算位非
          4. left_shift 向左移動二進制表示的位
          5. right_shift 向右移動二進制表示的位

          示例

          import numpy as np
          print '13 和 17 的二進制形式:'
          a,b = 13,17
          print bin(a), bin(b)
          print '\n'
          print '13 和 17 的位與:'
          print np.bitwise_and(13, 17)

          輸出如下:

          1317 的二進制形式:
          0b1101 0b10001

          1317 的位與:
          1

          你可以使用下表驗證此輸出。考慮下面的位與真值表。

          A B AND
          1 1 1
          1 0 0
          0 1 0
          0 0 0


          NumPy - 字符串函數(shù)


          以下函數(shù)用于對dtypenumpy.string_numpy.unicode_的數(shù)組執(zhí)行向量化字符串操作。它們基于 Python 內(nèi)置庫中的標(biāo)準(zhǔn)字符串函數(shù)。

          序號 函數(shù)及描述
          1. add() 返回兩個strUnicode數(shù)組的逐個字符串連接
          2. multiply() 返回按元素多重連接后的字符串
          3. center() 返回給定字符串的副本,其中元素位于特定字符串的中央
          4. capitalize() 返回給定字符串的副本,其中只有第一個字符串大寫
          5. title() 返回字符串或 Unicode 的按元素標(biāo)題轉(zhuǎn)換版本
          6. lower() 返回一個數(shù)組,其元素轉(zhuǎn)換為小寫
          7. upper() 返回一個數(shù)組,其元素轉(zhuǎn)換為大寫
          8. split() 返回字符串中的單詞列表,并使用分隔符來分割
          9. splitlines() 返回元素中的行列表,以換行符分割
          10. strip() 返回數(shù)組副本,其中元素移除了開頭或者結(jié)尾處的特定字符
          11. join() 返回一個字符串,它是序列中字符串的連接
          12. replace() 返回字符串的副本,其中所有子字符串的出現(xiàn)位置都被新字符串取代
          13. decode() 按元素調(diào)用str.decode
          14. encode() 按元素調(diào)用str.encode

          這些函數(shù)在字符數(shù)組類(numpy.char)中定義。較舊的 Numarray 包包含chararray類。numpy.char類中的上述函數(shù)在執(zhí)行向量化字符串操作時非常有用。

          示例

          import numpy as np 
          print '連接兩個字符串:'
          print np.char.add(['hello'],[' xyz'])
          print '\n'
          print '連接示例:'
          print np.char.add(['hello', 'hi'],[' abc', ' xyz'])

          輸出如下:

          連接兩個字符串:
          ['hello xyz']

          連接示例:
          ['hello abc' 'hi xyz']

          NumPy - 算數(shù)函數(shù)

          很容易理解的是,NumPy 包含大量的各種數(shù)學(xué)運算功能。NumPy 提供標(biāo)準(zhǔn)的三角函數(shù),算術(shù)運算的函數(shù),復(fù)數(shù)處理函數(shù)等。

          三角函數(shù)

          NumPy 擁有標(biāo)準(zhǔn)的三角函數(shù),它為弧度制單位的給定角度返回三角函數(shù)比值。

          舍入函數(shù)

          numpy.around()

          這個函數(shù)返回四舍五入到所需精度的值。該函數(shù)接受以下參數(shù)。

          numpy.around(a,decimals)

          其中:

          序號 參數(shù)及描述
          1. a 輸入數(shù)組
          2. decimals 要舍入的小數(shù)位數(shù)。默認(rèn)值為0。如果為負(fù),整數(shù)將四舍五入到小數(shù)點左側(cè)的位置


          NumPy - 算數(shù)運算

          用于執(zhí)行算術(shù)運算(如add()subtract()multiply()divide())的輸入數(shù)組必須具有相同的形狀或符合數(shù)組廣播規(guī)則。

          示例 

          import numpy as np 
          a = np.arange(9, dtype = np.float_).reshape(3,3)  
          print  '第一個數(shù)組:'  
          print a
          print  '\n'  
          print  '第二個數(shù)組:'
          b = np.array([10,10,10])  
          print b
          print  '\n'  
          print  '兩個數(shù)組相加:'  
          print np.add(a,b)  
          print  '\n'  
          print  '兩個數(shù)組相減:'  
          print np.subtract(a,b)  
          print  '\n'  
          print  '兩個數(shù)組相乘:'  
          print np.multiply(a,b)  
          print  '\n'  
          print  '兩個數(shù)組相除:'  
          print np.divide(a,b)

          輸出如下:

          第一個數(shù)組:
          [[ 0. 1. 2.]
          [ 3. 4. 5.]
          [ 6. 7. 8.]]

          第二個數(shù)組:
          [10 10 10]

          兩個數(shù)組相加:
          [[ 10. 11. 12.]
          [ 13. 14. 15.]
          [ 16. 17. 18.]]

          兩個數(shù)組相減:
          [[-10. -9. -8.]
          [ -7. -6. -5.]
          [ -4. -3. -2.]]

          兩個數(shù)組相乘:
          [[ 0. 10. 20.]
          [ 30. 40. 50.]
          [ 60. 70. 80.]]

          兩個數(shù)組相除:
          [[ 0. 0.1 0.2]
          [ 0.3 0.4 0.5]
          [ 0.6 0.7 0.8]]

          NumPy - 統(tǒng)計函數(shù)

          NumPy 有很多有用的統(tǒng)計函數(shù),用于從數(shù)組中給定的元素中查找最小,最大,百分標(biāo)準(zhǔn)差和方差等。函數(shù)說明如下:

          numpy.amin() 和 numpy.amax()

          這些函數(shù)從給定數(shù)組中的元素沿指定軸返回最小值和最大值。

          numpy.ptp()

          numpy.ptp()函數(shù)返回沿軸的值的范圍(最大值 - 最小值)。

          numpy.percentile()

          百分位數(shù)是統(tǒng)計中使用的度量,表示小于這個值得觀察值占某個百分比。函數(shù)numpy.percentile()接受以下參數(shù)。

          numpy.percentile(a, q, axis)

          其中:

          序號 參數(shù)及描述
          1. a 輸入數(shù)組
          2. q 要計算的百分位數(shù),在 0 ~ 100 之間
          3. axis 沿著它計算百分位數(shù)的軸

          numpy.median()

          中值定義為將數(shù)據(jù)樣本的上半部分與下半部分分開的值。 numpy.median()函數(shù)的用法如下面的程序所示。

          numpy.mean()

          算術(shù)平均值是沿軸的元素的總和除以元素的數(shù)量。 numpy.mean()函數(shù)返回數(shù)組中元素的算術(shù)平均值。如果提供了軸,則沿其計算。

          numpy.average()

          加權(quán)平均值是由每個分量乘以反映其重要性的因子得到的平均值。 numpy.average()函數(shù)根據(jù)在另一個數(shù)組中給出的各自的權(quán)重計算數(shù)組中元素的加權(quán)平均值。該函數(shù)可以接受一個軸參數(shù)。如果沒有指定軸,則數(shù)組會被展開。

          考慮數(shù)組[1,2,3,4]和相應(yīng)的權(quán)重[4,3,2,1],通過將相應(yīng)元素的乘積相加,并將和除以權(quán)重的和,來計算加權(quán)平均值。

          加權(quán)平均值 = (1*4+2*3+3*2+4*1)/(4+3+2+1)

          標(biāo)準(zhǔn)差

          標(biāo)準(zhǔn)差是與均值的偏差的平方的平均值的平方根。標(biāo)準(zhǔn)差公式如下:

          std = sqrt(mean((x - x.mean())**2))

          如果數(shù)組是[1,2,3,4],則其平均值為2.5。因此,差的平方是[2.25,0.25,0.25,2.25],并且其平均值的平方根除以4,即sqrt(5/4)是1.1180339887498949。

          方差

          方差是偏差的平方的平均值,即mean((x - x.mean())** 2)。換句話說,標(biāo)準(zhǔn)差是方差的平方根。

          NumPy - 排序、搜索和計數(shù)函數(shù)


          NumPy中提供了各種排序相關(guān)功能。這些排序函數(shù)實現(xiàn)不同的排序算法,每個排序算法的特征在于執(zhí)行速度,最壞情況性能,所需的工作空間和算法的穩(wěn)定性。下表顯示了三種排序算法的比較。


          種類 速度 最壞情況 工作空間 穩(wěn)定性
          'quicksort'(快速排序) 1 O(n^2) 0
          'mergesort'(歸并排序) 2 O(n*log(n)) ~n/2
          'heapsort'(堆排序) 3 O(n*log(n)) 0

          示例 

          import numpy as np  
          a = np.array([[3,7],[9,1]])  
          print  '我們的數(shù)組是:'  
          print a
          print  '\n'  
          print  '調(diào)用 sort() 函數(shù):'  
          print np.sort(a)  
          print  '\n'  
          print  '沿軸 0 排序:'  
          print np.sort(a, axis =  0)  
          print  '\n'  
          # 在 sort 函數(shù)中排序字段
          dt = np.dtype([('name',  'S10'),('age',  int)])
          a = np.array([("raju",21),("anil",25),("ravi",  17),  ("amar",27)], dtype = dt)  
          print  '我們的數(shù)組是:'  
          print a
          print  '\n'  
          print  '按 name 排序:'  
          print np.sort(a, order =  'name')

          輸出如下:

          我們的數(shù)組是:
          [[3 7]
          [9 1]]
          調(diào)用 sort() 函數(shù):
          [[3 7]
          [1 9]]
          沿軸 0 排序:
          [[3 1]
          [9 7]]
          我們的數(shù)組是:
          [('raju', 21) ('anil', 25) ('ravi', 17) ('amar', 27)]
          按 name 排序:
          [('amar', 27) ('anil', 25) ('raju', 21) ('ravi', 17)]

          NumPy - 線性代數(shù)


          NumPy 包包含numpy.linalg模塊,提供線性代數(shù)所需的所有功能。此模塊中的一些重要功能如下表所述。


          序號 函數(shù)及描述
          1. dot 兩個數(shù)組的點積
          2. vdot 兩個向量的點積
          3. inner 兩個數(shù)組的內(nèi)積
          4. matmul 兩個數(shù)組的矩陣積
          5. determinant 數(shù)組的行列式
          6. solve 求解線性矩陣方程
          7. inv 尋找矩陣的乘法逆矩陣

          示例 

          import numpy.matlib 
          import numpy as np

          a = np.array([[1,2],[3,4]])
          b = np.array([[11,12],[13,14]])
          np.dot(a,b)

          輸出如下:

          [[37  40] 
          [85  92]]

          NumPy - Matplotlib


          Matplotlib 是 Python 的繪圖庫。它可與 NumPy 一起使用,提供了一種有效的 MatLab 開源替代方案。它也可以和圖形工具包一起使用,如 PyQt 和 wxPython。


          Matplotlib 模塊最初是由 John D. Hunter 編寫的。自 2012 年以來,Michael Droettboom 是主要開發(fā)者。目前,Matplotlib 1.5.1 是可用的穩(wěn)定版本。該軟件包可以二進制分發(fā),其源代碼形式在 www.matplotlib.org 上提供。

          通常,通過添加以下語句將包導(dǎo)入到 Python 腳本中:

          from matplotlib import pyplot as plt

          這里pyplot()是 matplotlib 庫中最重要的函數(shù),用于繪制 2D 數(shù)據(jù)。以下腳本繪制方程y = 2x + 5

          示例 

          import numpy as np 
          from matplotlib import pyplot as plt

          x = np.arange(1,11)
          y =  2  * x +  5
          plt.title("Matplotlib demo")
          plt.xlabel("x axis caption")
          plt.ylabel("y axis caption")
          plt.plot(x,y)
          plt.show()

          ndarray對象xnp.arange()函數(shù)創(chuàng)建為x軸上的值。y軸上的對應(yīng)值存儲在另一個數(shù)組對象y中。這些值使用matplotlib軟件包的pyplot子模塊的plot()函數(shù)繪制。

          圖形由show()函數(shù)展示。

          上面的代碼應(yīng)該產(chǎn)生以下輸出:


          作為線性圖的替代,可以通過向plot()函數(shù)添加格式字符串來顯示離散值。可以使用以下格式化字符。


          字符 描述
          '-' 實線樣式
          '--' 短橫線樣式
          '-.' 點劃線樣式
          ':' 虛線樣式
          '.' 點標(biāo)記
          ',' 像素標(biāo)記
          'o' 圓標(biāo)記
          'v' 倒三角標(biāo)記
          '^' 正三角標(biāo)記
          '<' 左三角標(biāo)記
          '>' 右三角標(biāo)記
          '1' 下箭頭標(biāo)記
          '2' 上箭頭標(biāo)記
          '3' 左箭頭標(biāo)記
          '4' 右箭頭標(biāo)記
          's' 正方形標(biāo)記
          'p' 五邊形標(biāo)記
          '*' 星形標(biāo)記
          'h' 六邊形標(biāo)記 1
          'H' 六邊形標(biāo)記 2
          '+' 加號標(biāo)記
          'x' X 標(biāo)記
          'D' 菱形標(biāo)記
          'd' 窄菱形標(biāo)記
          '|' 豎直線標(biāo)記
          '_' 水平線標(biāo)記


          還定義了以下顏色縮寫。


          字符 顏色
          'b' 藍(lán)色
          'g' 綠色
          'r' 紅色
          'c' 青色
          'm' 品紅色
          'y' 黃色
          'k' 黑色
          'w' 白色


          要顯示圓來代表點,而不是上面示例中的線,請使用ob作為plot()函數(shù)中的格式字符串。

          示例 

          import numpy as np 
          from matplotlib import pyplot as plt

          x = np.arange(1,11)
          y =  2  * x +  5
          plt.title("Matplotlib demo")
          plt.xlabel("x axis caption")
          plt.ylabel("y axis caption")
          plt.plot(x,y,"ob")
          plt.show()

          上面的代碼應(yīng)該產(chǎn)生以下輸出:


          繪制正弦波

          以下腳本使用 matplotlib 生成正弦波圖

          示例 

          import numpy as np 
          import matplotlib.pyplot as plt
          # 計算正弦曲線上點的 x 和 y 坐標(biāo)
          x = np.arange(0,  3  * np.pi,  0.1)
          y = np.sin(x)
          plt.title("sine wave form")  
          # 使用 matplotlib 來繪制點
          plt.plot(x, y)
          plt.show()


          subplot()

          subplot()函數(shù)允許你在同一圖中繪制不同的東西。在下面的腳本中,繪制正弦余弦值。

          示例 

          import numpy as np 
          import matplotlib.pyplot as plt
          # 計算正弦和余弦曲線上的點的 x 和 y 坐標(biāo)
          x = np.arange(0,  3  * np.pi,  0.1)
          y_sin = np.sin(x)
          y_cos = np.cos(x)  
          # 建立 subplot 網(wǎng)格,高為 2,寬為 1  
          # 激活第一個 subplot
          plt.subplot(2,  1,  1)  
          # 繪制第一個圖像
          plt.plot(x, y_sin)
          plt.title('Sine')  
          # 將第二個 subplot 激活,并繪制第二個圖像
          plt.subplot(2,  1,  2)
          plt.plot(x, y_cos)
          plt.title('Cosine')  
          # 展示圖像
          plt.show()

          上面的代碼應(yīng)該產(chǎn)生以下輸出:


          bar()

          pyplot子模塊提供bar()函數(shù)來生成條形圖。以下示例生成兩組xy數(shù)組的條形圖。

          示例 

          from matplotlib import pyplot as plt 
          x =  [5,8,10]
          y =  [12,16,6]
          x2 =  [6,9,11]
          y2 =  [6,15,7]
          plt.bar(x, y, align =  'center')
          plt.bar(x2, y2, color =  'g', align =  'center')
          plt.title('Bar graph')
          plt.ylabel('Y axis')
          plt.xlabel('X axis')
          plt.show()

          NumPy - 使用 Matplotlib 繪制直方圖


          NumPy 有一個numpy.histogram()函數(shù),它是數(shù)據(jù)的頻率分布的圖形表示。水平尺寸相等的矩形對應(yīng)于類間隔,稱為bin,變量height對應(yīng)于頻率。

          numpy.histogram()


          numpy.histogram()函數(shù)將輸入數(shù)組和bin作為兩個參數(shù)。 bin數(shù)組中的連續(xù)元素用作每個bin的邊界。

          import numpy as np 

          a = np.array([22,87,5,43,56,73,55,54,11,20,51,5,79,31,27]) ]
          np.histogram(a,bins =  [0,20,40,60,80,100])
          hist,bins = np.histogram(a,bins =  [0,20,40,60,80,100])  
          print hist
          print bins

          輸出如下:

          [3 4 5 2 1]
          [0 20 40 60 80 100]

          plt()

          Matplotlib 可以將直方圖的數(shù)字表示轉(zhuǎn)換為圖形。 pyplot子模塊的plt()函數(shù)將包含數(shù)據(jù)和bin數(shù)組的數(shù)組作為參數(shù),并轉(zhuǎn)換為直方圖。

          from matplotlib import pyplot as plt 
          import numpy as np  

          a = np.array([22,87,5,43,56,73,55,54,11,20,51,5,79,31,27])
          plt.hist(a, bins =  [0,20,40,60,80,100])
          plt.title("histogram")
          plt.show()

          輸出如下:


          你看到的只是NumPy教程的冰山一角,因全部內(nèi)容過多,完整教程可以在公眾號后臺回復(fù)NumPy直接獲取。

          PS:如果覺得分享內(nèi)容有幫助,記得隨手分享、點贊、在看~
          < END >

          瀏覽 30
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产又爽 又黄 免费网站在线 | 亚洲男人天堂一本 | 国产粉嫩小泬13p高潮 | 亚洲AV无码乱码在线观小说 | 亚洲国产色情 |