一、NumPy簡介和安裝
二、NumPy型數組--ndarray簡介
三、NumPy型數組--ndarray的應用
四、NumPy型數組--ndarray資料類型
五、NumPy型數組--ndarray資料類型(NaN,INF)
六、NumPy型數組--ndarray的建立
6.1一維數組的建立
6.2多元數組的建立
七、NumPy型數組--ndarray的屬性
八、NumPy型數組--ndarray運算(加減乘除)
九、NumPy型數組--ndarray運算(函數)
十、NumPy型數組--ndarray篩選資料
10.1通過索引篩選資料
10.2 通過切片篩選資料
一、NumPy簡介和安裝
NumPy是高性能科學計算和資料分析的基礎包,是pandas等其他各種工具的基礎
安裝方法:
pip3 install numpy
引用方式:
import numpy as np
二、NumPy型數組--ndarray簡介
之前python中學過的類似數組類型有:清單,元祖
而在NumPy中,有專門的數組類型叫ndarray,可以由清單,元祖轉換而成。
ndarray,一個多元數組結構,高效且節省空間
無需循環對數組資料進行快速運算的數學函數
線性代數、随機數生成和傅裡葉變換功能
三、NumPy型數組--ndarray的應用
例如:已知若幹家跨國公司的市值(美元),将其轉換為人民币
a = [ramdom.uniform(1000.0, 2000.0), for i in range(50)]
dic = 6.8
a=np.array(a)
a*dic //得出結果
例如:已知購物車的商品價格和商品數量求商品總金額
price = [ramdom.uniform(100.0, 200.0), for i in range(50)]
quantity=[ramdom.randint(1,10), for i in range(50)]
price=np.array(price)
quantity=np.array(quantity)
price*quantity //每個商品總價 每一項分别相乘
price*quantity.sum() //所有商品總價
四、NumPy型數組--ndarray資料類型
數組對象内元素類型必須相同,數組大小不可更改
布爾型:bool_
字元型: str
整型:int_ int8 int16 int32 int64 //數字表示位
無符号整型:uint8 uint16 uint32 uint64 //隻表示0和正數
浮點:float_ float16 float32 float64
複數:complex_ complex64 complex128
五、NumPy型數組--ndarray資料類型(NaN,INF)
NAN:不是數字,不等于任何浮點數,也不等于自己 ,例如:0/0 sqrt(-1)
INF:無限大的float,比任何浮點數都大 np.inf==np.inf為真 例如: 5/0
怎樣判斷結果集b裡有沒有NAN?[nan,1.]
np.isnan(b) [True,False] # 判斷有沒有NAN
b[~(np.isnan(b))] # 删除NAN
怎樣過濾c中的INF?
c[c!=np.inf] 或 c[np.isinf(c)]
六、NumPy型數組--ndarray的建立
讀取檔案:
numpy.genfromtxt("word.txt", delimiter=",", dtype=str, skip_header=1)
6.1一維數組的建立
np.array([1,2,3,4,5])
np.array( [ramdom.uniform(100.0, 200.0), for i in range(50)] ) //由清單生成式轉換,産生50個100-200之間的随機浮點數
np.array(range(20)) //由疊代器轉換
np.zeros(10,dtype=np.int32) //10個0,預設是float
np.zeros( (3,4) ) //3行4列的零
np.ones(10) //10個1,預設是float
a=np.empty(100) //随機值,之前記憶體的殘值。要确認以後會指派就用這個
np.arange(2,100,3) //起始值,結束值,步長,步長可為小數
np.linspace(0,100,101) //[起始值,結束值],個數。等差數列
NumPy随機數生成:
np.random.randint(0, 10, 30) #生成30個0~10範圍的數
np.random.randint(0, 10, (3,5,6)) # 生成三維數組(3,5,6)
np.random.rand(10) # 傳回10個0~1的數
np.random.choice([1,2,3,4,5], 10) # 傳回清單中的數,共10個
np.random.uniform(2.0, 4.0, 10) # 傳回10個2.0~4.0的浮點數,平均分布
6.2多元數組的建立
np.arange(15),reshape((3,5)) //15個數變成3行5列的二維數組
np.array([ [1,2,3], [4,5,6] ]) //二維數組"一張紙"
np.array([ [ [1,2,3], [4,5,6],[3,2,1],[6,5,4] ] , [ [1,2,3], [4,5,6],[3,2,1],[6,5,4] ] ]) //三維數組"一個本"
七、NumPy型數組--ndarray的屬性
a = np.array(range(20))
1、a.dtype //檢視存的資料的類型
2、a.size //檢視數組元素個數
3、a.shape //傳回行列數:一維傳回(列數,) 二維傳回(行數,列數),三維傳回(厚度,行數,列數)
4、a.T //行轉列
5、a.ndim //檢視維數
6、資料類型轉換: a.astype( float )
八、NumPy型數組--ndarray運算(加減乘除)
向量:ndarray
标量:1,2,3,4等
ndarray可以和标量運算: +-*/><
ndarray可以和ndarray運算(長度一樣才行):+-*/><
九、NumPy型數組--ndarray運算(函數)
能同時對數組中所有元素進行運算
通用函數:
np.abs
np.sqrt
np.ceil 向上取整
np.floor 向下取整
np.round<==>np.rint 向外取整
np.trunc 向0取整
np.modf x,y=np.modf(a) x是小數部分,y是整數部分
多元數組轉一維數組:a.reval()
一維數組轉多元數組(6行2列):a.shape=(6,2)
np.vstack( (a,b) ) # a,b拼接,a,b的列數必須一樣,縱向拉長
np.hstack(a,b) # a,b拼接,a,b的行數必須一樣,橫向拉長
np.hsplit(a,3) # 按列切分隔3列切一刀,上面的逆操作
np.hsplit(a, (3,4) ) # 按列切分, (3,4)處切一刀
np.vsplit... # 同理 ,按行切分
二進制函數:
np.maximum(a, b) # 一一對應取出最大的
np.minmum(a, b) # 一一對應取出最小的
求和:axis=0/1 按行或列求
a.sum(axis=0/1) # 對a中所有的求和
a.mean(axis=0/1) # 求平均值
a.var(axis=0/1) # 求方差 表示資料的離散程度,越高表示離散程度越高
a.std() # 求标準差。通過方差開方得到。
a.min(axis=0/1) # 傳回最小值
a.max(axis=0/1) # 傳回最大值
a.argmax(axis=0/1) # 傳回最大值的下标
a.argmin(axis=0/1) # 傳回最小值的下标
十、NumPy型數組--ndarray篩選資料
10.1通過索引篩選資料
ndarray普通索引:
一維數組: a[0] a[1] a[2]
二維數組:a[0][0] a[0,0] 推薦第二種
ndarray布爾型索引:邏輯或/與
例如:給一個數組,選出數組中所有大于5的數
a=np.arange(10)
a[a>5]
原理://先執行a>5得到布爾數組,
//布爾索引:把同樣大小的布爾數組傳進索引,這樣把a裡對應為True的傳回
例如:選出數組中大于5的偶數
a[(a>5) & (a%2==0)] //用&要加括号,不加報錯
a[(a>5) | (a%2==0)] //邏輯或
ndarray花式索引:
a = np.arange(20)
例如:取出1,3,4,6,7位置的值
b=[1,3,4,6,7]
a[b]
10.2 通過切片篩選資料
ndarray切片 和 普通清單切片有什麼不同?
ndarray切片預設是原數組的引用,修改切片會導緻原數組修改
除非使用:a[0:4].copy()才複制一份
一維數組切片:
a[0:4:2] //開始位置,結束位置,步長
二維數組切片:
例如a=np.array([ [1,2,3], [4,5,6] ])
切1,2,4,5逗号左邊是行右邊是列
a[0:2,0:2]
二維數組
a[0, : ] 第一行切片
a[0: a[0]>2] 第一行大于2的
a[[1,3],:][:,[1,3]] 取1,3行中的1,3列