1. 程式人生 > 其它 >Python NumPy庫入門

Python NumPy庫入門

第一週 資料分析之表示

單元一: NumPy庫入門

資料的維度

維度:一組資料的組織形式

一維資料:一維資料由對等關係的有序或無序資料構成,採用線性方式組織,對應列表、陣列和集合等概念

​ 列表和陣列 區別:列表的資料型別可以不同,陣列的資料型別相同

二維資料: 二維資料是有多個一維資料構成,是一維資料的組合形式。表格是典型的二維資料,其中,表頭是二維資料的一部分

多維資料:多維資料有一維或二維在新維度上擴充套件而成

高維資料:高維資料僅利用最基本的二元關係展示資料間的複雜結構。

資料維度的Python展示

資料維度是資料的組織形式

一維資料:列表和集合型別

二維資料:列表型別

多維資料:列表型別

高維資料:字典型別或資料表示格式JSON、XML、YAML格式

NumPy的陣列物件:ndarray

NumPy的介紹:

NumPy的引用:

import numpy as np

思考:Python已有列表型別,為什麼還需要一個數組物件(型別)?

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

  2. 設定專門的陣列物件,經過優化可以提高運算速度

  3. 在科學計算中,一個維度所有的資料型別往往相同。陣列物件採用相同的資料型別,有助於節省運算和儲存空間

N維陣列物件:ndarray

介紹:

ndarray是一個多維陣列物件,有兩部分構成 實際的資料 ,描述這些資料的元資料(資料維度,資料型別等)

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

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 64位無符號整數,取值:\([0,2^{64}-1]\)
float16 16位半精度浮點數:1位符號位,5位指數,10位尾數
float32 32位半精度浮點數:1位符號位,8位指數,23位尾數
float64 64位半精度浮點數:1位符號位,11位指數,52位尾數
complex64 複數型別,實部和虛部都是32位浮點數
complex128 複數型別,實部和虛部都是64位浮點數

思考:為什麼ndarray要支援這麼多中元素型別?

對比:Python語法僅支援整數、浮點數和複數三種類型

  1. 科學計算涉及資料比較多,對儲存和效能都有較高要求
  2. 對元素型別精細定義,有助於NumPy合理使用儲存空間並優化效能
  3. 對元素型別精確定義,有助於程式設計師對程式規模有合理評估

非同質的ndarray物件

ndarray陣列可以由非同質物件構成,

非同質ndarray元素為物件型別,非同質物件無法發揮NumPy優勢,儘量避免

ndarray陣列的建立

ndarray陣列的建立方法

  1. 從Python列表、元組等型別建立ndarray陣列
  2. 使用NumPy中函式建立ndarray陣列,如:arange,ones,zeros等
  3. 從位元組流(raw,bytes)中建立ndarray陣列
  4. 從檔案中讀取特定格式,建立ndarray陣列

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

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

函式 說明
np.arrange(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
np.linspace() 根據起止資料等距填充資料,形成陣列
np.concatenate() 將兩個或多個數組合併成為一個新的陣列

ndarray陣列的變換

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

ndarray陣列的維度變換

方法 說明
.reshape(shape) 不改變陣列元素,返回一個shape形狀的陣列,原陣列不變
.resize(shape) 與reshape()功能一致,但修改原陣列
.swapaxes(ax1,ax2) 將陣列n個維度中的兩個維度進行調換
.flatten() 對陣列進行降維,返回摺疊後的一維陣列,原陣列不變

ndarray陣列的型別轉換

new_a = a.astype(new_type)

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

ndarray陣列向列表的轉換

ls = a.tolist()

ndarray陣列的索引與切片

索引: 獲取陣列中特定位置元素的過程

切片:獲取陣列元素子集的過程

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

起始編號:終止編號:步長

​ **編號0從左端遞增,或-1從右端遞減 **

多維陣列的索引:

每個維度一個索引值,逗號分割

多維陣列的切片:

選取一個維度用: 每個維度切片方法與一維陣列相同 每個維度可以使用步長跳躍切片

ndarray陣列與標量之間的運算

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

NumPy一元函式

對ndarray中的資料執行元素級別的函式

注意陣列是否被改變

NumPy二元函式