1. 程式人生 > >資料分析Numpy庫入門

資料分析Numpy庫入門

NumPy庫入門

Python組織不同維度資料的方式

         一維資料:用列表,例如:[3.1398, 3.1349, 3.1376] 有序;和集合型別,例如: {3.1398, 3.1349, 3.1376} 無序。

        二維資料:列表型別

        多維資料:列表型別,例如:[ [3.1398, 3.1349, 3.1376], [3.1413, 3.1404, 3.1401] ]

        高維資料:字典型別,例如:dict = {“firstName” :“Tian”, “lastName” : “Song”, },或者資料表示格式:JSON、XML和YAML格式等。

NumPy簡介

        NumPy是一個開源的Python科學計算基礎庫,包含:

        1.一個強大的N維陣列物件ndarray

        2.廣播功能函式

        3.整合C/C++/Fortran程式碼的工具

        4. 線性代數、傅立葉變換、隨機數生成等功能

        NumPySciPyPandas等資料處理或科學計算庫的基礎

        NumPy的引用,引入模組的別名:import numpy as np。儘管別名可以省略或更改,建議使用這個約定的別名。

NumPy的陣列物件:ndarray

        Python已有列表型別,為什麼需要一個數組物件

(型別)

        1.ndarray陣列物件可以去掉元素間運算所需的迴圈,使一維向量更像單個數據;

        2.設定專門的陣列物件,經過優化,可以提升這類應用的運算速度;

        3.實際觀察可以發現:在科學計算中,一個維度所有資料的型別往往相同;

        4.陣列物件採用相同的資料型別,有助於節省運算和儲存空間。

        ndarray是一個多維陣列物件,由兩部分構成:

        • 實際的資料

        • 描述這些資料的元資料(資料維度、資料型別等)

        ndarray陣列一般要求所有元素型別相同(同質),陣列下標從0開始。

        ndarray在程式中的別名是:array,軸(axis): 儲存資料的維度;秩(rank):軸的數量。


ndarray物件的屬性

屬性

說明

ndim

秩,即軸的數量或維度的數量

shape

ndarray物件的尺度,對於矩陣,n行m列

size

ndarray物件元素的個數,相當於.shape中n*m的值

dtype

ndarray物件的元素型別

itemsize

ndarray物件中每個元素的大小,以位元組為單位

Ndarray陣列元素型別

資料型別

說明

bool

布林型別,True或False

intc

與C語言中的int型別一致,一般是int32或int64

intp

用於索引的整數,與C語言中ssize_t一致,int32或int64

int8

位元組長度的整數,取值:[‐128, 127]

int16

16位長度的整數,取值:[‐32768, 32767]

int32

32位長度的整數,取值:[‐2^31 , 2^31‐1]

int64

64位長度的整數,取值:[‐2^63 , 2^63‐1]

uint8

8位無符號整數,取值:[0, 255]

uint16

16位無符號整數,取值:[0, 65535]

uint32

32位無符號整數,取值:[0, 2^32‐1]

uint64

32位無符號整數,取值:[0, 2^64‐1]

float16

16位半精度浮點數:1位符號位,5位指數,10位尾數

float32

32位半精度浮點數:1位符號位,8位指數,23位尾數

float64

64位半精度浮點數:1位符號位,11位指數,52位尾數

complex64

複數型別,實部和虛部都是32位浮點數

complex128

複數型別,實部和虛部都是64位浮點數

        說明:浮點數的表示:(符號)尾數 *10^指數,複數的表示:實部(.real)+ j虛部(.imag)。

        ndarray為什麼要支援這麼多種元素型別?對比:Python語法僅支援整數、浮點數和複數3種類型。

        1.科學計算涉及資料較多,對儲存和效能都有較高要求;

        2.對元素型別精細定義,有助於NumPy合理使用儲存空間並優化效能;

        3.對元素型別精細定義,有助於程式設計師對程式規模有合理評估

        注意:ndarray陣列可以由非同質物件構成,非同質ndarray元素為物件型別,但是非同質ndarray物件無法有效發揮NumPy優勢,儘量避免使用。

ndarray陣列的建立方法

        1.從Python中的列表、元組等型別建立ndarray陣列

        2.使用NumPy中函式建立ndarray陣列,如:arange, ones, zeros等

        3. 從位元組流(raw bytes)中建立ndarray陣列

        4.從檔案中讀取特定格式,建立ndarray陣列

        (1)從Python中的列表、元組等型別建立ndarray陣列:x = np.array(list/tuple),x = np.array(list/tuple,dtype=np.float32),當np.array()不指定dtype時,NumPy將根據資料情況關聯一個dtype型別。


        (2)使用NumPy中函式建立ndarray陣列,如:arange, ones, zeros等。

函式

說明

np.arange(n)

類似range()函式,返回ndarray型別,元素從0到n‐1

np.ones(shape)

根據shape生成一個全1陣列,shape是元組型別

np.zeros(shape)

根據shape生成一個全0陣列,shape是元組型別

np.full(shape,val)

根據shape生成一個數組,每個元素值都是val

np.eye(n)

建立一個正方的n*n單位矩陣,對角線為1,其餘為0

np.ones_like(a)

根據陣列a的形狀生成一個全1陣列

np.zeros_like(a)

根據陣列a的形狀生成一個全0陣列

np.full_like(a,val)

根據陣列a的形狀生成一個數組,每個元素值都是val


(3)使用NumPy中其他函式建立ndarray陣列:

函式

說明

np.linspace()

根據起止資料等間距地填充資料,形成陣列

np.concatenate()

將兩個或多個數組合併成一個新的陣列

 

ndarray陣列的變換

        對於建立後的ndarray陣列,可以對其進行維度變換和元素型別變換

函式

說明

.reshape(shape)

不改變陣列元素,返回一個shape形狀的陣列,原陣列不變

.resize(shape)

與.reshape()功能一致,但修改原陣列

.swapaxes(ax1,ax2)

將陣列n個維度中兩個維度進行調換

.flatten()

對陣列進行降維,返回摺疊後的一維陣列,原陣列不變


        注意:astype()方法一定會建立新的陣列(原始資料的一個拷貝),即使兩個型別一致。

ndarray陣列的操作

        索引:獲取陣列中特定位置元素的過程;切片:獲取陣列元素子集的過程。

        一維陣列的索引和切片:與Python的列表類似:


ndarray陣列的運算

        陣列與標量之間的運算作用於陣列的每一個元素


        NumPy一元函式,對ndarray中的資料執行元素級運算的函式

函式

說明

np.abs(x)  np.fabs(x)

計算陣列各元素的絕對值

np.sqrt(x)

計算陣列各元素的平方根

np.square(x)

計算陣列各元素的平方

np.log(x)  np.log10(x)

np.log2(x)

計算陣列各元素的自然對數、10底對數和2底對數

np.ceil(x) np.floor(x)

計算陣列各元素的ceiling值 或 floor值

np.rint(x)

計算陣列各元素的四捨五入值

np.modf(x)

將陣列各元素的小數和整數部分以兩個獨立陣列形式返回

np.cos(x) np.cosh(x)

np.sin(x) np.sinh(x)

np.tan(x) np.tanh(x)

計算陣列各元素的普通型和雙曲型三角函式

np.exp(x)

計算陣列各元素的指數值

np.sign(x)

計算陣列各元素的符號值,1(+),  0, ‐1(‐)


        NumPy二元函式

函式

說明

+ ‐ * / **

兩個陣列各元素進行對應運算

np.maximum(x,y) np.fmax()

np.minimum(x,y) np.fmin()

元素級的最大值/最小值計算

np.mod(x,y)

元素級的模運算

np.copysign(x,y)

將陣列y中各元素值的符號賦值給陣列x對應元素

> < >= <= == !=

算術比較,產生布爾型陣列

 

總結