吳思楠機(jī)器學(xué)習(xí)之路:Numpy里多維數(shù)組的創(chuàng)建
Numpy是Python科學(xué)計(jì)算的核心庫(kù)之一,主要提供了對(duì)多維數(shù)組的強(qiáng)有力支持。
什么是多維數(shù)組?
核心對(duì)象是同型的多維數(shù)組(簡(jiǎn)單理解就是一個(gè)表格,通常內(nèi)容都是些數(shù)字),具有相同的數(shù)據(jù)類(lèi)型。
概念:
1. axes(軸):數(shù)組的維度統(tǒng)稱(chēng)為軸。
2. rank:軸的數(shù)量稱(chēng)為rank。
舉例:一維數(shù)組[1,2,1],就是一個(gè)rank為1的數(shù)組,因?yàn)樗挥幸粋€(gè)軸(一維)。下圖顯示的是一個(gè)rank為2(二維)的數(shù)組。它的***個(gè)軸(維)的長(zhǎng)度是2,如紅色線(xiàn)框所示;第二個(gè)軸(維)的長(zhǎng)度是3,如藍(lán)色線(xiàn)框所示。這個(gè)有點(diǎn)像數(shù)據(jù)結(jié)構(gòu)里說(shuō)的:數(shù)組的元素本身也可以是數(shù)組類(lèi)型一樣,***擴(kuò)展下去。
Numpy里的多維數(shù)組:ndarray
Numpy的數(shù)組類(lèi)numpy.array一般稱(chēng)呼為ndarray,這么叫主要是為了和Python的數(shù)組類(lèi)array.array區(qū)分開(kāi)來(lái)。后面的文章里,如無(wú)特殊說(shuō)明的地方,array和ndarray均是指的numpy.array。
ndarray(numpy.array)的主要屬性:
- ndim:數(shù)組的軸數(shù)(維度)
- shape:python的元組類(lèi)型,其中每個(gè)數(shù)字分別表示的是各個(gè)軸(維)上數(shù)組的長(zhǎng)度
- size:多維數(shù)組里全部元素的總數(shù)(等于shape元組里所有數(shù)值的乘積)
- dtype:多維數(shù)組里元素的類(lèi)型。同一個(gè)多維數(shù)組里所有的元素都是同一種類(lèi)型
這里插播一下:
Anaconda是一個(gè)基于Python的Data Science Platform,相當(dāng)于一個(gè)包裝了數(shù)據(jù)分析常用庫(kù)和工具的軟件。它是我們開(kāi)始學(xué)習(xí)的一個(gè)好幫手。下載地址:https://www.continuum.io/anaconda-overview。
安裝好后,打開(kāi)“IPython”,或者“Jupyter QtConsole”,或者“Spyder”都可以。它們本質(zhì)上都是對(duì)IPython這個(gè)交互式環(huán)境的包裝。
練習(xí):創(chuàng)建一個(gè)ndarray。
直接使用numpy.array()方法,參數(shù)為python的 list or tuple (sequence type)。下面的代碼里,“In”是我們輸入的代碼,“Out”是上一行代碼的輸出。不是每一行代碼都會(huì)有輸出哦。
代碼:
下面這張圖是在“Spyder”里執(zhí)行上面代碼的效果圖:
雙擊上圖中的變量查看窗口(Variable explorer)里的ndarray,可以看到一個(gè)二維數(shù)組的展示圖:
創(chuàng)建ndarray的一些其它方法
1. zeros,ones和empty方法
- numpy.zeros
- numpy.ones
- numpy.empty
numpy提供了另外一種快速創(chuàng)建ndarray的方法,尤其適合數(shù)組內(nèi)容未知的情況,同時(shí)也避免了數(shù)組增長(zhǎng)過(guò)程中的開(kāi)銷(xiāo)
2. arange方法
arange可以返回一個(gè)平均分布的ndarray(numpy.array)。可以分別設(shè)置開(kāi)始(可選),結(jié)束(必填)和間距(可選)。下面的示例非常清楚的展示了該方法的使用。
3. reshape方法
顧名思義,此方法是將一個(gè)已經(jīng)存在了的ndarray,轉(zhuǎn)換為另外一個(gè)shape(形狀,即數(shù)組各個(gè)軸上的長(zhǎng)度)的多維數(shù)組。新數(shù)組包含了原來(lái)所有的數(shù)據(jù)。
注意:新的形狀必需保持size相同,直白一點(diǎn),就是***個(gè)shape的參數(shù),3x4=12,需要和第二個(gè)shape的參數(shù)2x6=12,始終保持一致。
4. random方法
用隨機(jī)數(shù)填充新數(shù)組的內(nèi)容。numpy里有多個(gè)產(chǎn)生數(shù)據(jù)數(shù)組的方法,容易搞暈。產(chǎn)生隨機(jī)數(shù)目前我見(jiàn)到兩大類(lèi),一類(lèi)是按照“均勻分布”(例如概率論里的“0-1連續(xù)分布”)產(chǎn)生,另一類(lèi)是按照“正態(tài)分布”產(chǎn)生的。
在numpy里,我們會(huì)見(jiàn)到random,ranf,sample這幾個(gè)方法,其實(shí)它們?nèi)慷际牵?/p>
numpy.random.random_sample這個(gè)方法的別名,都是基于“均勻分布”產(chǎn)生隨機(jī)數(shù)。下面的代碼驗(yàn)證了這一點(diǎn):
詳細(xì)介紹下用的最多一個(gè):
numpy.random.random
它隨機(jī)返回半開(kāi)區(qū)間[0.0, 1.0)的浮點(diǎn)數(shù),方法參數(shù)只有一個(gè):
size : int或者int型元組,同時(shí)也作為返回?cái)?shù)組的shape。如果輸入的是(2,3,5),則首先抽取2x3x5=30個(gè)隨機(jī)數(shù),然后形成一個(gè)形狀為(2,3,5)的多維數(shù)組作為返回值。如果沒(méi)有提供參數(shù),則直接返回一個(gè)隨機(jī)數(shù)。
練習(xí):生成[12, 30)區(qū)間的一個(gè)6x3的數(shù)組
代碼:
好了,關(guān)于numpy第1講就到這里,還有很多內(nèi)容待后面用到的時(shí)候又再介紹。
【本文為51CTO專(zhuān)欄作者“吳思楠”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過(guò)51CTO聯(lián)系作者獲取授權(quán)】