Python入門系列之初識Numpy

點(diǎn)擊上方 藍(lán)字 關(guān)注我們!

Numpy是Python中較為常用的模塊,今天我們就從Numpy的基礎(chǔ)應(yīng)用講起,非常適合0基礎(chǔ)的小白哦,python系列的基礎(chǔ)課程也會持續(xù)更新。
首先,我們在運(yùn)用某個模塊之前需要先導(dǎo)入這個模塊。
import numpynumpy.__version__
詳解Python列表List


創(chuàng)建一個數(shù)值型的列表
L?=?list(range(10))L# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]type(L[0])# int
創(chuàng)建一個字符串列表
L2 = [str(c) for c in L]L2#?['0',?'1',?'2',?'3',?'4',?'5',?'6',?'7',?'8',?'9']#?查看數(shù)據(jù)類型type(L2[0])# str
創(chuàng)建一個異構(gòu)列表
什么是異構(gòu)列表?因?yàn)镻ython動態(tài)類型特征,所以list里面的元素可以是不同類型,如下所示
L3 = [True, "2", 3.0, 4][type(item)?for?item?in?L3]# [bool, str, float, int]
那么這個動態(tài)的列表和固定類型的Numpy數(shù)組之間的區(qū)別是什么呢?請看下圖,數(shù)組基本上包括一個指向連續(xù)數(shù)據(jù)塊的指針;而列表包含一個指向指針塊的指針,其中每一個指針對應(yīng)一個完整的Python對象,因此列表可以用不同的數(shù)據(jù)類型進(jìn)行填充。
怎么去理解上面這些專業(yè)術(shù)語呢?換句話來說,就是Array數(shù)組整個數(shù)據(jù)塊共用一個指針,而List每一個元素都有一個指針,所以List具有多元動態(tài)性!

Python中的數(shù)組Array的數(shù)據(jù)類型介紹


首先,我們先來了解下Python中Numpy的標(biāo)準(zhǔn)數(shù)據(jù)類型,如下表所示,包括了整型,浮點(diǎn)型,布爾值等多種類型,可以根據(jù)自己的需求選擇相應(yīng)的數(shù)據(jù)類型。

運(yùn)用Numpy模塊創(chuàng)建簡單的Array


Python中內(nèi)置的數(shù)組(array)模塊可用于創(chuàng)建統(tǒng)一類型的密集數(shù)組,代碼里的‘i’是一個動態(tài)類型碼,表示數(shù)據(jù)為整型。
import arrayL = list(range(10))A = array.array('i', L)A# output array('i', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
另外,我們可以給Python的模塊取個別名,方便我們之后調(diào)用,如下代碼示例。
import numpy as np# 創(chuàng)建一個integer類型的數(shù)組:np.array([1,?4,?2,?5,?3])
Python中的Numpy模塊不同于List,其要求數(shù)組必須是同一類型的數(shù)據(jù),如果數(shù)據(jù)類型不匹配,Numpy會向上轉(zhuǎn)換,詳細(xì)情況請看如下示例。
np.array([3.14, 4, 2, 3])# array([ 3.14, 4. , 2. , 3. ])
該示例中,將整型的4,2,3強(qiáng)行轉(zhuǎn)換為float浮點(diǎn)型的數(shù)據(jù)。
如果你希望明確的設(shè)置數(shù)組的數(shù)據(jù)類型,請使用dtype關(guān)鍵字。
np.array([1, 2, 3, 4], dtype='float32')# array([ 1., 2., 3., 4.], dtype=float32)
利用python創(chuàng)建多維嵌套數(shù)組。
#?通過循環(huán)體創(chuàng)建多維數(shù)組np.array([range(i, i + 3) for i in [2, 4, 6]])array([[2,?3,?4],[4, 5, 6],[6, 7, 8]])
運(yùn)用Numpy模塊和內(nèi)置函數(shù)高效創(chuàng)建Array


np.zeros ()創(chuàng)建數(shù)值為0的數(shù)組
np.zeros(10, dtype=int)
np.ones()創(chuàng)建值為1的數(shù)組np.ones((3, 5), dtype=float)# array([[ 1., 1., 1., 1., 1.],# [ 1., 1., 1., 1., 1.],# [ 1., 1., 1., 1., 1.]])
np.full()創(chuàng)建任意值的數(shù)組
np.full((3,?5),?3.14)array([[?3.14,??3.14,??3.14,??3.14,??3.14],???????[?3.14,??3.14,??3.14,??3.14,??3.14],[ 3.14, 3.14, 3.14, 3.14, 3.14]])
np.arange()創(chuàng)建一個現(xiàn)行序列數(shù)組
下列示例的具體含義為創(chuàng)建一個從0開始到20結(jié)束,步長為2的數(shù)組。
np.arange(0,?20,?2)# array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
np.linspace()創(chuàng)建一個5個元素的數(shù)組,這5個數(shù)均勻地分配到0-1
np.linspace(0, 1, 5)# array([ 0. , 0.25, 0.5 , 0.75, 1. ])
np.random.random()創(chuàng)建在0-1之間均勻分布的隨機(jī)數(shù)組成的數(shù)組
np.random.random((3, 3))# array([[ 0.99844933, 0.52183819, 0.22421193],# [ 0.08007488, 0.45429293, 0.20941444],#???????[?0.14360941,??0.96910973,??0.946117??]])
np.random.normal()創(chuàng)建正太分布的隨機(jī)數(shù)組
np.random.normal(0, 1, (3, 3))# array([[ 1.51772646, 0.39614948, -0.10634696],# [ 0.25671348, 0.00732722, 0.37783601],# [ 0.68446945, 0.15926039, -0.70744073]])
np.random.randint()創(chuàng)建隨機(jī)整型數(shù)組
np.random.randint(0, 10, (3, 3))# array([[2, 3, 4],# [5, 7, 8],# [0, 5, 0]])
np.eye()創(chuàng)建單位矩陣
np.eye(3)# array([[ 1., 0., 0.],# [ 0., 1., 0.],#???????[?0.,??0.,??1.]])
np.empty()創(chuàng)建整型數(shù)組成的未初始化的數(shù)組,數(shù)組的值是內(nèi)存空間內(nèi)的任意的值。
np.empty(3)# array([ 1., 1., 1.])

相關(guān)閱讀:
