資料分析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. 線性代數、傅立葉變換、隨機數生成等功能
NumPy是SciPy、Pandas等資料處理或科學計算庫的基礎
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對應元素 |
> < >= <= == != |
算術比較,產生布爾型陣列 |