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