Python中numpy庫入門
阿新 • • 發佈:2018-12-04
Python中numpy
Numpy是一個開源的Python科學計算基礎庫
以下學習自中國大學MOOC 嵩天 《Python資料分析與展示》
一.Numpy庫入門
1.Numpy的引入
import numpy as np
使用別名可以縮短在程式中匯入numpy方法的長度,np
為約定名
2.N維資料物件:ndarray
- 陣列物件可以去掉元素運算所需的迴圈,使一維向量更像單個數據
- 設定專門的陣列物件可以提升此類應用的運算速度
- 陣列物件採用相同的資料型別,可以幫助節省運算和儲存空間
- 程式中別名為
array
3.ndarray物件的屬性
屬性 | 含義 |
---|---|
.ndim |
維度的數量 |
.shape |
ndarray物件的尺度,n行m列 |
.size |
ndarray物件的個數,其.shape 中n*m |
.dtype |
ndarray物件的元素型別 |
.itemsize |
ndarray物件中每個元素的大小,以位元組為單位 |
3.ndarray物件的元素型別
資料型別 | 說明 |
---|---|
bool | 布林型別,True或False |
intc | 與C語言中的int型別一致,一般是int32或int64 |
intp | 用於索引的整數,與C語言中ssize_t一致,int32或int64 |
int8 | 位元組長度的整數,取值:[‐128, 127] |
int16 | 16位長度的整數,取值:[‐32768, 32767] |
int32 | 32位長度的整數,取值:[‐231 |
int64 | 64位長度的整數,取值:[‐263 , 263 ‐1] |
uint8 | 8位無符號整數,取值:[0, 255] |
uint16 | 16位無符號整數,取值:[0, 65535] |
uint32 | 32位無符號整數,取值:[0, 232 ‐1] |
uint64 | 32位無符號整數,取值:[0, 264 ‐1] |
float16 | 16位半精度浮點數:1位符號位,5位指數,10位尾數 |
float32 | 32位半精度浮點數:1位符號位,8位指數,23位尾數 |
float64 | 64位半精度浮點數:1位符號位,11位指數,52位尾數 |
complex64 | 複數型別,實部和虛部都是32位浮點數 |
complex128 | 複數型別,實部和虛部都是64位浮點數 |
這麼多種的元素型別的存在因為:
- 科學計算資料繁多,儲存和效能要求極高
- 有利於合理使用儲存空間以及優化效能
二.ndarray陣列的建立
1.使用原始結構型別建立
# 通過列表建立ndarray
a = np.array([1,2,3,4,5,6])
print(a)
# 通過元組建立ndarray
b = np.array((1,2,3,4,5,6))
print(b)
2.使用numpy函式建立
常規方法
函式 | 說明 |
---|---|
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 |
np.linspace() |
根據起止資料等間距地填充資料,形成陣列 |
np.concatenate() |
將兩個或多個數組合併成一個新的陣列 |
三.ndarray陣列的變換
1.維度變換
方法 | 說明 |
---|---|
.reshape(shape) |
不改變陣列元素,返回一個shape形狀的陣列,原陣列不變 |
.resize(shape) |
與.reshape()功能一致,但修改原陣列 |
.swapaxes(ax1,ax2) |
將陣列n個維度中兩個維度進行調換 |
.flatten() |
對陣列進行降維,返回摺疊後的一維陣列,原陣列不變 |
例項:
建立一個三維陣列a
.reshape(shape)
不修改原陣列
.resize(shape)
修改原陣列
.swapaxes(ax1,ax2)
二維陣列:
三維陣列:
.flatten()
將原數(原陣列維度>1)組降維,一維還是原陣列
2.型別變換
b = a.astype(new_type)
3.陣列向列表的轉換
a_list = a.tolist()
四.ndarray陣列的操作(索引與切片)
1.一維陣列(同列表)
2.多維陣列
兩個逗號隔開三個維度,分別進行操作
五.陣列與標量之間的運算
陣列與標量之間的運算作用於陣列的每一個元素
一原函式
方法 | 說明 |
---|---|
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(‐) |
二原函式
方法 | 說明 |
---|---|
+ ‐ * / ** | 兩個陣列各元素進行對應運算 |
np.maximum(x,y) np.fmax() |
元素級的最大值/最小值計算 |
np.mod(x,y) |
元素級的模運算 |
np.copysign(x,y) |
將陣列y中各元素值的符號賦值給陣列x對應元素 |
> < >= <= == != | 算術比較,產生布爾型陣列 |
原陣列:
部分例項: