欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入理解NumPy簡明教程---數(shù)組1

 更新時間:2016年12月17日 15:26:11   作者:Daetalus  
這篇文章主要介紹了深入理解NumPy簡明教程(二、數(shù)組1),NumPy數(shù)組是一個多維數(shù)組對象,具有一定的參考價值,感興趣的小伙伴們可以參考一下。

目前我的工作是將NumPy引入到Pyston中(一款Dropbox實現(xiàn)的Python編譯器/解釋器)。在工作過程中,我深入接觸了NumPy源碼,了解其實現(xiàn)并提交了PR修復NumPy的bug。在與NumPy源碼以及NumPy開發(fā)者打交道的過程中,我發(fā)現(xiàn)當今中文NumPy教程大部分都是翻譯或參考英文文檔,因此導致了許多疏漏。比如NumPy數(shù)組中的broadcast功能,幾乎所有中文文檔都翻譯為“廣播”。而NumPy的開發(fā)者之一,回復到“broadcast is a compound -- native English speakers can see that it's " broad" + "cast" = "cast (scatter, distribute) broadly, I guess "cast (scatter, distribute) broadly" probably is closer to the meaning(NumPy中的含義)"。有鑒于此,我打算啟動一個項目,以我對NumPy使用以及源碼層面的了解編寫一個系列的教程。

NumPy數(shù)組

NumPy數(shù)組是一個多維數(shù)組對象,稱為ndarray。其由兩部分組成:

  • 實際的數(shù)據(jù)
  • 描述這些數(shù)據(jù)的元數(shù)據(jù)

大部分操作僅針對于元數(shù)據(jù),而不改變底層實際的數(shù)據(jù)。

關于NumPy數(shù)組有幾點必需了解的:

  • NumPy數(shù)組的下標從0開始。
  • 同一個NumPy數(shù)組中所有元素的類型必須是相同的。

NumPy數(shù)組屬性

在詳細介紹NumPy數(shù)組之前。先詳細介紹下NumPy數(shù)組的基本屬性。NumPy數(shù)組的維數(shù)稱為秩(rank),一維數(shù)組的秩為1,二維數(shù)組的秩為2,以此類推。在NumPy中,每一個線性的數(shù)組稱為是一個軸(axes),秩其實是描述軸的數(shù)量。比如說,二維數(shù)組相當于是兩個一維數(shù)組,其中第一個一維數(shù)組中每個元素又是一個一維數(shù)組。所以一維數(shù)組就是NumPy中的軸(axes),第一個軸相當于是底層數(shù)組,第二個軸是底層數(shù)組里的數(shù)組。而軸的數(shù)量——秩,就是數(shù)組的維數(shù)。

NumPy的數(shù)組中比較重要ndarray對象屬性有:

  • ndarray.ndim:數(shù)組的維數(shù)(即數(shù)組軸的個數(shù)),等于秩。最常見的為二維數(shù)組(矩陣)。
  • ndarray.shape:數(shù)組的維度。為一個表示數(shù)組在每個維度上大小的整數(shù)元組。例如二維數(shù)組中,表示數(shù)組的“行數(shù)”和“列數(shù)”。ndarray.shape返回一個元組,這個元組的長度就是維度的數(shù)目,即ndim屬性。
  • ndarray.size:數(shù)組元素的總個數(shù),等于shape屬性中元組元素的乘積。
  • ndarray.dtype:表示數(shù)組中元素類型的對象,可使用標準的Python類型創(chuàng)建或指定dtype。另外也可使用前一篇文章中介紹的NumPy提供的數(shù)據(jù)類型。
  • ndarray.itemsize:數(shù)組中每個元素的字節(jié)大小。例如,一個元素類型為float64的數(shù)組itemsiz屬性值為8(float64占用64個bits,每個字節(jié)長度為8,所以64/8,占用8個字節(jié)),又如,一個元素類型為complex32的數(shù)組item屬性為4(32/8)。
  • ndarray.data:包含實際數(shù)組元素的緩沖區(qū),由于一般通過數(shù)組的索引獲取元素,所以通常不需要使用這個屬性。

創(chuàng)建數(shù)組

先來介紹創(chuàng)建數(shù)組。創(chuàng)建數(shù)組的方法有很多。如可以使用array函數(shù)從常規(guī)的Python列表和元組創(chuàng)造數(shù)組。所創(chuàng)建的數(shù)組類型由原序列中的元素類型推導而來?!  ?nbsp;

>>> from numpy import *     
>>> a = array( [2,3,4] )    
>>> a 
  array([2, 3, 4]) 
>>> a.dtype 
  dtype('int32') 
>>> b = array([1.2, 3.5, 5.1])    
>>> b.dtype 
  dtype('float64') 

使用array函數(shù)創(chuàng)建時,參數(shù)必須是由方括號括起來的列表,而不能使用多個數(shù)值作為參數(shù)調用array。   

>>> a = array(1,2,3,4)  # 錯誤 
>>> a = array([1,2,3,4]) # 正確 

可使用雙重序列來表示二維的數(shù)組,三重序列表示三維數(shù)組,以此類推。

>>> b = array( [ (1.5,2,3), (4,5,6) ] )   
>>> b 
  array([[ 1.5, 2. , 3. ], 
      [ 4. , 5. , 6. ]]) 

可以在創(chuàng)建時顯式指定數(shù)組中元素的類型

>>> c = array( [ [1,2], [3,4] ], dtype=complex) 
>>> c 
  array([[ 1.+0.j, 2.+0.j], 
     [ 3.+0.j, 4.+0.j]]) 

通常,剛開始時數(shù)組的元素未知,而數(shù)組的大小已知。因此,NumPy提供了一些使用占位符創(chuàng)建數(shù)組的函數(shù)。這些函數(shù)有助于滿足除了數(shù)組擴展的需要,同時降低了高昂的運算開銷。

用函數(shù)zeros可創(chuàng)建一個全是0的數(shù)組,用函數(shù)ones可創(chuàng)建一個全為1的數(shù)組,函數(shù)empty創(chuàng)建一個內容隨機并且依賴與內存狀態(tài)的數(shù)組。默認創(chuàng)建的數(shù)組類型(dtype)都是float64。

可以喲娜特d.dtype.itemsize來查看數(shù)組中元素占用的字節(jié)數(shù)目。

>>> d = zeros((3,4)) 
>>> d.dtype 
dtype('float64') 
>>> d 
array([[ 0., 0., 0., 0.], 
    [ 0., 0., 0., 0.], 
    [ 0., 0., 0., 0.]]) 
>>> d.dtype.itemsize 
8 

也可以自己制定數(shù)組中元素的類型

>>> ones( (2,3,4), dtype=int16 ) #手動指定數(shù)組中元素類型 
   array([[[1, 1, 1, 1], 
       [1, 1, 1, 1], 
       [1, 1, 1, 1]], 
    
       [[1, 1, 1, 1], 
       [1, 1, 1, 1], 
       [1, 1, 1, 1]]], dtype=int16) 
>>> empty((2,3)) 
   array([[ 2.65565858e-316,  0.00000000e+000,  0.00000000e+000], 
       [ 0.00000000e+000,  0.00000000e+000,  0.00000000e+000]]) 

NumPy提供一個類似arange的函數(shù)返回一個數(shù)列形式的數(shù)組:

>>> arange(10, 30, 5) 
  array([10, 15, 20, 25]) 

以10開始,差值為5的等差數(shù)列。該函數(shù)不僅接受整數(shù),還接受浮點參數(shù): 

>>> arange(0,2,0.5) 
  array([ 0. , 0.5, 1. , 1.5]) 

當arange使用浮點數(shù)參數(shù)時,由于浮點數(shù)精度有限,通常無法預測獲得的元素個數(shù)。因此,最好使用函數(shù)linspace去接收我們想要的元素個數(shù)來代替用range來指定步長。linespace用法如下,將在通用函數(shù)一節(jié)中詳細介紹。

>>> numpy.linspace(-1, 0, 5) 
    array([-1. , -0.75, -0.5 , -0.25, 0. ]) 

數(shù)組中的元素是通過下標來訪問的,可以通過方括號括起一個下標來訪問數(shù)組中單一一個元素,也可以以切片的形式訪問數(shù)組中多個元素。關于切片訪問,將在切片一節(jié)介紹。

知識點:NumPy中的數(shù)據(jù)類型

對于科學計算來說,Python中自帶的整型、浮點型和復數(shù)類型遠遠不夠,因此NumPy中添加了許多數(shù)據(jù)類型。如下:

NumPy中的基本數(shù)據(jù)類型

NumPy中的基本數(shù)據(jù)類型
名稱 描述
bool 用一個字節(jié)存儲的布爾類型(True或False)
inti 由所在平臺決定其大小的整數(shù)(一般為int32或int64)
int8 一個字節(jié)大小,-128 至 127
int16 整數(shù),-32768 至 32767
int32 整數(shù),-2 ** 31 至 2 ** 32 -1
int64 整數(shù),-2 ** 63 至 2 ** 63 - 1
uint8 無符號整數(shù),0 至 255
uint16 無符號整數(shù),0 至 65535
uint32 無符號整數(shù),0 至 2 ** 32 - 1
uint64 無符號整數(shù),0 至 2 ** 64 - 1
float16 半精度浮點數(shù):16位,正負號1位,指數(shù)5位,精度10位
float32 單精度浮點數(shù):32位,正負號1位,指數(shù)8位,精度23位
float64或float 雙精度浮點數(shù):64位,正負號1位,指數(shù)11位,精度52位
complex64 復數(shù),分別用兩個32位浮點數(shù)表示實部和虛部
complex128或complex 復數(shù),分別用兩個64位浮點數(shù)表示實部和虛部

NumPy類型轉換方式如下:

>>> float64(42) 
  42.0 
>>> int8(42.0) 
  42 
>>> bool(42) 
  True 
>>> bool(42.0) 
  True 
>>> float(True) 
  1.0 

許多函數(shù)的參數(shù)中可以指定參數(shù)的類型,當然,這個類型參數(shù)是可選的。如下:

>>> arange(7, dtype=uint16) 
  array([0, 1, 2, 3, 4, 5, 6], dtype=uint16) 

輸出數(shù)組

當輸出一個數(shù)組時,NumPy以特定的布局用類似嵌套列表的形式顯示:

  • 第一行從左到右輸出
  • 每行依次自上而下輸出
  • 每個切片通過一個空行與下一個隔開
  • 一維數(shù)組被打印成行,二維數(shù)組成矩陣,三維數(shù)組成矩陣列表?!?/li>
>>> a = arange(6)             # 1d array 
>>> print a 
  [0 1 2 3 4 5] 
    
>>> b = arange(12).reshape(4,3)      # 2d array 
>>> print b 
  [[ 0 1 2] 
  [ 3 4 5] 
  [ 6 7 8] 
  [ 9 10 11]]    
>>> c = arange(24).reshape(2,3,4)     # 3d array 
>>> print c 
  [[[ 0 1 2 3] 
  [ 4 5 6 7] 
  [ 8 9 10 11]] 
    
  [[12 13 14 15] 
  [16 17 18 19] 
  [20 21 22 23]]] 

 reshape將在下一篇文章中介紹 

如果一個數(shù)組太長,則NumPy自動省略中間部分而只打印兩端的數(shù)據(jù):   

>>> print arange(10000) 
   [  0  1  2 ..., 9997 9998 9999] 
    
>>> print arange(10000).reshape(100,100) 
   [[  0  1  2 ...,  97  98  99] 
    [ 100 101 102 ..., 197 198 199] 
    [ 200 201 202 ..., 297 298 299] 
    ..., 
    [9700 9701 9702 ..., 9797 9798 9799] 
    [9800 9801 9802 ..., 9897 9898 9899] 
    [9900 9901 9902 ..., 9997 9998 9999]] 

可通過設置printoptions參數(shù)來禁用NumPy的這種行為并強制打印整個數(shù)組。

set_printoptions(threshold='nan') 

這樣,輸出時數(shù)組的所有元素都會顯示出來。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 利用PyQT5日期控件制作一個小日歷

    利用PyQT5日期控件制作一個小日歷

    這篇文章主要介紹了利用PyQT5的日期控件制作一個小日歷,因為pyqt5已經(jīng)自帶了相關的日期控件,只需要明白如何調用再加上比較個性化的功能,這個日歷的小控件就制作完成了。需要的可以參考一下
    2022-01-01
  • python統(tǒng)計多維數(shù)組的行數(shù)和列數(shù)實例

    python統(tǒng)計多維數(shù)組的行數(shù)和列數(shù)實例

    今天小編就為大家分享一篇python統(tǒng)計多維數(shù)組的行數(shù)和列數(shù)實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • 解決PyCharm同目錄下導入模塊會報錯的問題

    解決PyCharm同目錄下導入模塊會報錯的問題

    今天小編就為大家分享一篇解決PyCharm同目錄下導入模塊會報錯的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Scrapy使用的基本流程與實例講解

    Scrapy使用的基本流程與實例講解

    今天小編就為大家分享一篇關于Scrapy使用的基本流程與實例講解,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • python+OpenCV人臉識別考勤系統(tǒng)實現(xiàn)的詳細代碼

    python+OpenCV人臉識別考勤系統(tǒng)實現(xiàn)的詳細代碼

    作為一個基于人臉識別算法的考勤系統(tǒng)的設計與實現(xiàn)教程,以下內容將提供詳細的步驟和代碼示例。本教程將使用 Python 語言和 OpenCV 庫進行實現(xiàn),需要的朋友可以參考下
    2023-05-05
  • 基于Python+Appium實現(xiàn)京東雙十一自動領金幣功能

    基于Python+Appium實現(xiàn)京東雙十一自動領金幣功能

    一年一度的雙十一即將來臨,各大平臺都在搞活動,京東天貓忙的不易樂乎,做任務領金幣的過程真的好無聊,今天小編給大家分享一篇教程通關Python+Appium實現(xiàn)京東雙十一自動領金幣功能,需要的朋友可以參考下
    2019-10-10
  • Python利用3D引擎做一個太陽系行星模擬器

    Python利用3D引擎做一個太陽系行星模擬器

    Python有一個不錯的3D引擎——Ursina。本文就來利用Ursina這一3D引擎做一個太陽系行星模擬器,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-01-01
  • Python+tkinter實現(xiàn)樹形圖繪制

    Python+tkinter實現(xiàn)樹形圖繪制

    Treeview是ttk中的樹形表組件,功能十分強大,非常適用于系統(tǒng)路徑的表達,下面我們就來看看如何利用這一組件實現(xiàn)樹形圖的繪制吧,有需要的可以參考下
    2023-09-09
  • Django 博客實現(xiàn)簡單的全文搜索的示例代碼

    Django 博客實現(xiàn)簡單的全文搜索的示例代碼

    這篇文章主要介紹了Django 博客實現(xiàn)簡單的全文搜索的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • python查詢mysql,返回json的實例

    python查詢mysql,返回json的實例

    下面小編就為大家分享一篇python查詢mysql,返回json的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03

最新評論