亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

NumPy簡明教程(二、數組1)

2019-11-10 17:16:38
字體:
來源:轉載
供稿:網友

NumPy數組(1、數組初探)

更新

目前我的工作是將NumPy引入到Pyston中(一款Dropbox實現的Python編譯器/解釋器)。在工作過程中,我深入接觸了NumPy源碼,了解其實現并提交了PR修復NumPy的bug。在與NumPy源碼以及NumPy開發者打交道的過程中,我發現當今中文NumPy教程大部分都是翻譯或參考英文文檔,因此導致了許多疏漏。比如NumPy數組中的broadcast功能,幾乎所有中文文檔都翻譯為“廣播”。而NumPy的開發者之一,回復到“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使用以及源碼層面的了解編寫一個系列的教程。

地址隨后會更新。CSDN的排版(列表)怎么顯示不正常了。。。

NumPy數組

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

實際的數據描述這些數據的元數據

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

關于NumPy數組有幾點必需了解的:

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

NumPy數組屬性

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

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

ndarray.ndim:數組的維數(即數組軸的個數),等于秩。最常見的為二維數組(矩陣)。

ndarray.shape:數組的維度。為一個表示數組在每個維度上大小的整數元組。例如二維數組中,表示數組的“行數”和“列數”。ndarray.shape返回一個元組,這個元組的長度就是維度的數目,即ndim屬性。

ndarray.size:數組元素的總個數,等于shape屬性中元組元素的乘積。

ndarray.dtype:表示數組中元素類型的對象,可使用標準的Python類型創建或指定dtype。另外也可使用前一篇文章中介紹的NumPy提供的數據類型。

ndarray.itemsize:數組中每個元素的字節大小。例如,一個元素類型為float64的數組itemsiz屬性值為8(float64占用64個bits,每個字節長度為8,所以64/8,占用8個字節),又如,一個元素類型為complex32的數組item屬性為4(32/8)。

ndarray.data:包含實際數組元素的緩沖區,由于一般通過數組的索引獲取元素,所以通常不需要使用這個屬性。

創建數組

  先來介紹創建數組。創建數組的方法有很多。如可以使用array函數從常規的Python列表和元組創造數組。所創建的數組類型由原序列中的元素類型推導而來。   [python] view plain copy >>> 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函數創建時,參數必須是由方括號括起來的列表,而不能使用多個數值作為參數調用array。   [python] view plain copy >>> a = array(1,2,3,4)    # 錯誤  >>> a = array([1,2,3,4])  # 正確  可使用雙重序列來表示二維的數組,三重序列表示三維數組,以此類推。[python] view plain copy >>> b = array( [ (1.5,2,3), (4,5,6) ] )    >>> b      array([[ 1.5,  2. ,  3. ],          [ 4. ,  5. ,  6. ]])  可以在創建時顯式指定數組中元素的類型[python] view plain copy >>> c = array( [ [1,2], [3,4] ], dtype=complex)  >>> c      array([[ 1.+0.j,  2.+0.j],         [ 3.+0.j,  4.+0.j]])  通常,剛開始時數組的元素未知,而數組的大小已知。因此,NumPy提供了一些使用占位符創建數組的函數。這些函數有助于滿足除了數組擴展的需要,同時降低了高昂的運算開銷。

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

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

[python] view plain copy >>> 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  也可以自己制定數組中元素的類型[python] view plain copy >>> ones( (2,3,4), dtype=int16 )  #手動指定數組中元素類型        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的函數返回一個數列形式的數組:[python] view plain copy >>> arange(10, 30, 5)      array([10, 15, 20, 25])  以10開始,差值為5的等差數列。該函數不僅接受整數,還接受浮點參數: [python] view plain copy >>> arange(0,2,0.5)      array([ 0. ,  0.5,  1. ,  1.5])  

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

[python] view plain copy >>> numpy.linspace(-1, 0, 5)          array([-1.  , -0.75, -0.5 , -0.25,  0.  ])  數組中的元素是通過下標來訪問的,可以通過方括號括起一個下標來訪問數組中單一一個元素,也可以以切片的形式訪問數組中多個元素。關于切片訪問,將在切片一節介紹。知識點:NumPy中的數據類型對于科學計算來說,Python中自帶的整型、浮點型和復數類型遠遠不夠,因此NumPy中添加了許多數據類型。如下:
NumPy中的基本數據類型
名稱描述
bool用一個字節存儲的布爾類型(True或False)
inti由所在平臺決定其大小的整數(一般為int32或int64)
int8一個字節大小,-128 至 127
int16整數,-32768 至 32767
int32整數,-2 ** 31 至 2 ** 32 -1
int64整數,-2 ** 63 至 2 ** 63 - 1
uint8無符號整數,0 至 255
uint16無符號整數,0 至 65535
uint32無符號整數,0 至 2 ** 32 - 1
uint64無符號整數,0 至 2 ** 64 - 1
float16半精度浮點數:16位,正負號1位,指數5位,精度10位
float32單精度浮點數:32位,正負號1位,指數8位,精度23位
float64或float雙精度浮點數:64位,正負號1位,指數11位,精度52位
complex64復數,分別用兩個32位浮點數表示實部和虛部
complex128或complex復數,分別用兩個64位浮點數表示實部和虛部

NumPy類型轉換方式如下:

[python] view plain copy >>> float64(42)      42.0  >>> int8(42.0)      42  >>> bool(42)      True  >>> bool(42.0)      True  >>> float(True)      1.0  許多函數的參數中可以指定參數的類型,當然,這個類型參數是可選的。如下:[python] view plain copy >>> arange(7, dtype=uint16)      array([0, 1, 2, 3, 4, 5, 6], dtype=uint16)  

輸出數組

    當輸出一個數組時,NumPy以特定的布局用類似嵌套列表的形式顯示:第一行從左到右輸出每行依次自上而下輸出每個切片通過一個空行與下一個隔開一維數組被打印成行,二維數組成矩陣,三維數組成矩陣列表。
    [python] view plain copy >>> 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將在下一篇文章中介紹     如果一個數組太長,則NumPy自動省略中間部分而只打印兩端的數據:   [python] view plain copy >>> 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參數來禁用NumPy的這種行為并強制打印整個數組。
[python] view plain copy set_printoptions(threshold='nan')  

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

未完待續,如有錯誤,敬請指正!

參考文獻:

《NumPy for Beginner》《Python科學計算》《Tentative NumPy Tutorial》


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国外日韩电影在线观看| 午夜精品久久17c| 久久成人综合视频| 91成人性视频| 日韩精品中文字幕有码专区| 精品国产电影一区| 精品久久久久久久久久久久久久| 亚洲男人天堂视频| 不卡av在线网站| 欧美xxxx综合视频| 伊人久久久久久久久久久| 亚洲国产欧美久久| 97精品国产97久久久久久| 亚洲色图综合久久| 日韩精品一二三四区| 欧美性xxxxx极品娇小| 超碰97人人做人人爱少妇| 午夜精品在线视频| 91精品综合久久久久久五月天| 国产精品自拍小视频| 中文字幕日韩欧美精品在线观看| 成人免费视频在线观看超级碰| 欧美大片在线看免费观看| 亚洲国产精品成人va在线观看| 97久久精品人人澡人人爽缅北| 亚洲片av在线| 亚洲图片欧美午夜| 亚洲精品视频久久| 亚洲欧美综合区自拍另类| 亚洲精品成人免费| 亚洲剧情一区二区| 亚洲一区二区中文| 欧美久久精品一级黑人c片| 国产精品久久久久久久久久小说| 欧美一级高清免费| 国产精品久久久久久久久久久久| 久久综合久中文字幕青草| 成人激情视频在线观看| 国产精品美腿一区在线看| 亚洲成avwww人| 欧美激情亚洲激情| 久久精品视频网站| 国产成人精品一区二区三区| 日本人成精品视频在线| 国产91精品久| 色婷婷亚洲mv天堂mv在影片| 久久av资源网站| 国产精品白丝av嫩草影院| 欧美乱人伦中文字幕在线| 91久热免费在线视频| 亚洲成人精品视频| 在线看国产精品| 亚洲国产精品字幕| 高清欧美一区二区三区| 国产一区二区久久精品| 91探花福利精品国产自产在线| 日韩精品黄色网| 国产在线拍揄自揄视频不卡99| 久久影视电视剧免费网站清宫辞电视| 亚洲电影免费观看高清| www.日韩不卡电影av| 国产精品国产自产拍高清av水多| 精品日韩视频在线观看| 亚洲欧美精品一区| 日韩网站免费观看| 97在线免费观看| 91精品国产九九九久久久亚洲| 国产成人精品一区二区三区| 国语自产精品视频在免费| 欧美电影在线免费观看网站| 成人做爰www免费看视频网站| 日韩成人av网址| 成人激情在线播放| 日本精品视频在线观看| 伊人久久大香线蕉av一区二区| 日韩欧美亚洲范冰冰与中字| 亚洲人成网站免费播放| 欧美精品一区二区三区国产精品| 中文字幕欧美日韩va免费视频| 亚洲欧美激情精品一区二区| 欧美激情免费在线| 久久99精品久久久久久噜噜| 91精品国产综合久久香蕉最新版| 国产精品视频午夜| 日韩在线视频免费观看| 精品亚洲国产视频| 日本亚洲欧洲色| 日韩av日韩在线观看| 在线不卡国产精品| 欧美亚洲在线视频| 亚洲精品视频二区| 日韩电影第一页| 日韩欧美一区二区在线| 欧美日韩高清在线观看| 日韩午夜在线视频| 国产aⅴ夜夜欢一区二区三区| 77777少妇光屁股久久一区| 日韩av在线一区二区| 国产精品人成电影在线观看| 国外视频精品毛片| 九九热这里只有精品免费看| 2019国产精品自在线拍国产不卡| 国产精品久久久| 91精品国产乱码久久久久久蜜臀| 青草热久免费精品视频| 国产精品一区二区三区在线播放| 欧美日韩另类在线| 亚洲一区二区三区视频| 日韩精品视频免费在线观看| 日韩欧美国产成人| 性欧美xxxx| 97香蕉久久夜色精品国产| 国产综合在线观看视频| 亚洲欧美另类在线观看| 国产精品视频久久久久| 亚洲欧美另类中文字幕| 日韩大陆毛片av| 色偷偷偷综合中文字幕;dd| 久久精品国产v日韩v亚洲| 97av在线影院| 久久久女人电视剧免费播放下载| 久久久久亚洲精品国产| 欧美大尺度电影在线观看| 日韩高清人体午夜| 亚洲欧美精品suv| 国产精品第3页| 在线视频中文亚洲| 91精品视频观看| 日韩网站免费观看| 亚洲精品国产电影| 欧美中文在线字幕| 国产不卡av在线| 日韩成人性视频| 日韩欧中文字幕| 亚洲国产免费av| 久久人人爽人人爽人人片亚洲| 日韩在线观看免费高清完整版| 久久99精品视频一区97| 国产成人精品优优av| 在线观看精品自拍私拍| 91精品久久久久久| 亚洲成人精品av| 久久69精品久久久久久久电影好| 狠狠色香婷婷久久亚洲精品| 欧美精品国产精品日韩精品| 狠狠做深爱婷婷久久综合一区| 欧美视频在线观看免费| 国产精品电影网站| 国产精品人成电影| 97色伦亚洲国产| 欧美电影院免费观看| 亚洲xxxx3d| 久久久久久久国产| 国产视频丨精品|在线观看| 伊是香蕉大人久久| 欧美国产日韩视频| 亚洲美女av电影| 97视频国产在线| 亚洲精品电影网站| 久久高清视频免费| 一区二区三区 在线观看视| 精品高清一区二区三区| 性欧美办公室18xxxxhd| 国产丝袜一区二区三区免费视频|