Numpy介紹:
NumPy是高性能科學計算和數據分析的基礎包。它是pandas等其他各種工具的基礎。
NumPy的主要功能:
1)ndarray,一個多維數組結構,高效且節省空間
2)無需循環對整組數據進行快速運算的數學函數
3)讀寫磁盤數據的工具以及用於操作內存映射文件的工具
4)線性代數、隨機數生成和傅里葉變換功能
5)用於集成C、C++等代碼的工具
pyhton里面安裝、引入方式:
安裝方法:pip install numpy
引用方式:import numpy as np
創建數組:
a=[1,2,3,4] b=np.array(a) print(b,type(b)) #[1 2 3 4] <class 'numpy.ndarray'>
數組屬性:
#數組個數 print(b.size) #4 #數組形狀 print(b.shape) #(4,) #每個元素占用你的字節數 print(b.itemsize) #4 #維數 print(b.ndim) #1
arange定義一個數組,限定步長:
np.arange() 參數為初始值、結束值(不包含)、步長 array_arange=np.arange(10,30,5) print(array_arange) #[10 15 20 25]
linspace定義一個數組,限定數組元素的個數:
np.linspace() 數為初始值、結束值(包含)、元素的個數, array_linspace=np.linspace(0,2,9) #結果第一位是0 中間數值平均分配 結束為2 print(array_linspace) #[0. 0.25 0.5 0.75 1. 1.25 1.5 1.75 2. ]
快速創建N維數組:
ones,創建10行10列的數值為浮點1的矩陣
array_one=np.ones((5,5),dtype=int) #dtype=int 可以設置類型 print(array_one)
zeros,創建10行10列的數值為浮點0的矩陣
array_zero=np.zeros((2,5,5)) #array_zero=np.zeros((2,5,5)) 2:表示創建2個5行5列的數組 print(array_zero)
創建自定義數值的數組:
full,創建3*3 數值為5的數組
full_array=np.full((3,3),5) print(full_array)
eye,用來構造單位矩陣(默認情況下輸出的是對角線全“1”,其余全“0”的方陣
eye_array=np.eye(3) print(eye_array) '''結果 [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] '''
empty,生成未初始化的隨機值
empty_array=np.empty((2,4)) print(empty_array) '''結果為 [[6.23042183e-307 1.42417221e-306 1.37961641e-306 6.23039015e-307] [6.23053954e-307 1.78020169e-306 1.78021527e-306 3.91786943e-317]] '''
random生成隨機數組\數值
random.rand(),2*2 (范圍是0-1)
array_random=np.random.rand(2,2) print(array_random)
random.uniform(),隨機生成指定范圍內的一個數(小數)
array_uniform=np.random.uniform(0,5) print(array_uniform) #0.6259318369377503
random.randint(),隨機生成指定范圍內的一個數(整數不包含2)
array_randint=np.random.randint(0,2) print(array_randint) #1
正太分布
給定均值/標准差/維度的正態分布np.random.normal(1.75, 0.1, (2, 3))
#正態生成4行5列的二維數組 arr=np.random.normal(1.75,0.1,(4,5)) print(arr) #截取第1至2行的第2至3列(從第0行算起) after_arr=arr[1:3,2:4] #【參數1,參數2】 參數1取的行 參數2取的是范圍 print(after_arr) # '''結果 [[1.7121083 1.79442264 1.88480996 1.74680449 1.94296451] [1.75145398 1.84717094 1.61700579 1.79300659 1.65306822] [1.84915626 1.82844994 1.42992838 1.74578747 1.81638628] [1.78611223 1.79935389 1.71098421 1.7065452 1.93011894]] [[1.61700579 1.79300659] [1.42992838 1.74578747]] '''
reshape,改變數組形狀(注意:要求前后元素個數匹配)
one_20 = np.ones([20]) print("-->1行20列<--") print(one_20) #將上面的一維數組變為下面的二維 one_4_5 = one_20.reshape([4,5]) print("將形狀分為-->4行5列<--") print(one_4_5)
where,條件運算
stus_score = np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]]) print(stus_score) #比較並替換運算 res=np.where(stus_score<80,0,90) #(如果數值小於80,替換為0,如果大於80,替換為90) print(res)
統計運算
指定軸最大值amax(求每一行和列的最大值)
# 指定軸最大值amax(求每一行和列的最大值) stus_score=np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]]) print(stus_score) result_amax=np.amax(stus_score,axis=0) #axis=0/1; 0表示列 1表示行 print('每一列的最大值:',result_amax) #[86 88] result_amax2=np.amax(stus_score,axis=1) print('每一行的最大值:',result_amax2) #[88 82 84 86 81]
指定軸最小值amin(求每一行和列的最小值)
#指定軸最小值amin(求每一行和列的最小值) stus_score=np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]]) print(stus_score) result_amin=np.amin(stus_score,axis=0) print('每一列的最小值:',result_amin) result_amin2=np.amin(stus_score,axis=1) #[75 75] print('每一列的最小值:',result_amin2) #[80 81 75 83 75]
mean,求平均值
stus_score = np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]]) # 求每一行的平均值(0表示列) print("每一列的平均值:") result = np.mean(stus_score, axis=0) print(result) #[81.4 81.6] # 求每一行的平均值(1表示行) print("每一行的平均值:") result = np.mean(stus_score, axis=1) print(result) #[84. 81.5 79.5 84.5 78. ]
std,求方差
stus_score = np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]]) # 求每一行的方差(0表示列) print("每一列的方差:") result = np.std(stus_score, axis=0) print(result) # 求每一行的方差(1表示行) print("每一行的方差:") result = np.std(stus_score, axis=1) print(result)
數組運算
數組與數的運算
加法運算
#數組與數的運算(加法) stus_score=np.array(([80, 88], [82, 81], [84, 75], [86, 83], [75, 81])) print(stus_score) print(stus_score[:,0]) #[80 82 84 86 75] 打印第一列的值 #實現行和列的值都加5 stus_score[:,0] = stus_score[:,0]+5 #每一列值加5 stus_score[:,1] = stus_score[:,1]+5 #每一行值加5 print(stus_score)
乘法運算
#數組與數的運算(乘法) stus_score = np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]]) print("減半前:") print(stus_score) #實現行和列的值都減一半 stus_score[:, 0] = stus_score[:, 0]*0.5 #每一列乘0.5 stus_score[:, 0] = stus_score[:, 1]*0.5 #每一行乘0.5 print("減半后:") print(stus_score)
數組與數組之間運算加減乘除運算(基本用的不多)
a=np.array([1,2,3]) b=np.array([10,20,30]) c=a+b d=a-b e=a*b f=a/b print(c) #[11 22 33] print(d) #[ -9 -18 -27] print(e) #[10 40 90] print(f) #[0.1 0.1 0.1]
矩陣運算
場景:假設下面每個列表代表每個學生成績,例如,張三 平時成績80、期末成績88,計算每個人總成績是多少? stus_score = np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]]) #根據,平時成績占40% 期末成績占60%, 計算結果 q=np.array([[0.4],[0.6]]) result=np.dot(stus_score,q) print(result) '''結果 E:\python36\python3.exe C:/Python數據分析/numpy模塊.py [[84.8] [81.4] [78.6] [84.2] [78.6]] '''
vstack矩陣垂直拼接
#vstack矩陣垂直拼接 v1=[[0,1,2,3,4,5,], [6,7,8,9,10,11]] v2=[[12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23]] result=np.vstack((v1,v2)) print('v1與v2垂直拼接結果為:',result) '''結果 [[ 0 1 2 3 4 5] [ 6 7 8 9 10 11] [12 13 14 15 16 17] [18 19 20 21 22 23]] '''
hstack矩陣水平拼接
#hstack矩陣水平拼接 v1=[[0,1,2,3,4,5,], [6,7,8,9,10,11]] v2=[[12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23]] result=np.hstack((v1,v2)) print('v1與v2水平拼接結果為:',result) '''結果 [[ 0 1 2 3 4 5 12 13 14 15 16 17] [ 6 7 8 9 10 11 18 19 20 21 22 23]]
練習題目:
題目1:對一個二維數組,選出其第一列和第二列,組成新的二維數組。
res=np.array(([1,2,3],[4,5,6],[7,8,9])) print(res) print(res[:,[1,2]]) #思路第一個參數時表示去所有行,近一步然后取第1,2列 '''結果為 [[1 2 3] [4 5 6] [7 8 9]] [[2 3] [5 6] [8 9]] '''
題目2:對於一個數組,選出其第1,3,4,6,7個元素,組成新的二維數組。
res=np.array([1,2,3,4,5,6,7,8,9]) print(res[[1,3,4,6,7]])
