国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

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

2019-11-09 19:28:20
字體:
供稿:網(wǎng)友

NumPy數(shù)組(1、數(shù)組初探)

更新

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

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

NumPy數(shù)組

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

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

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

關(guān)于NumPy數(shù)組有幾點(diǎn)必需了解的:

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

NumPy數(shù)組屬性

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

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

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

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

ndarray.size:數(shù)組元素的總個(gè)數(shù),等于shape屬性中元組元素的乘積。

ndarray.dtype:表示數(shù)組中元素類型的對(duì)象,可使用標(biāo)準(zhǔn)的Python類型創(chuàng)建或指定dtype。另外也可使用前一篇文章中介紹的NumPy提供的數(shù)據(jù)類型。

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

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

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

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

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

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

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

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

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

NumPy類型轉(zhuǎn)換方式如下:

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

輸出數(shù)組

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

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

未完待續(xù),如有錯(cuò)誤,敬請(qǐng)指正!

參考文獻(xiàn):

《NumPy for Beginner》《Python科學(xué)計(jì)算》《Tentative NumPy Tutorial》


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 江津市| 建湖县| 馆陶县| 泗阳县| 葫芦岛市| 台南县| 东山县| 肃宁县| 丹凤县| 夏邑县| 无极县| 垦利县| 墨脱县| 玛沁县| 蓬安县| 盘锦市| 靖江市| 乐业县| 磐安县| 汽车| 万源市| 长子县| 全州县| 赤城县| 吉首市| 永胜县| 建平县| 康保县| 大理市| 积石山| 体育| 昭觉县| 荔浦县| 都昌县| 赤峰市| 舞钢市| 马尔康县| 钟山县| 雅江县| 巧家县| 湖北省|