numpy 數據(矩陣模塊)
種開源的數值計算擴展庫.這種庫可用來存儲和處理大型矩陣,比python自身的嵌套列表結構要高效的多(該結構也可以用來表示矩
https://www.runoob.com/numpy/numpy-tutorial.html
比較一下 nu.array 和 list 的區別
np.array是多維的,list是一維的
list對一維數組做一些操作,numpy其實就是對多維做操作
.計算速度快,甚至優於python內置的簡單運算,使其成為pandas、sklearn等模塊的依賴包。高級的框架如TensorFlow、PyTorch等,其數組操作也和numpy非常相似
矩陣即numpy的np.array對象,創建矩陣就是把==列表==傳入np.array()
import numpy as nu # 數據矩陣
# 一維矩陣 arr1 = nu.array([1, 2, 3]) print(arr1) # [1 2 3] # 只有一行 # 相當於一條直線
print("************************二維對象**********************************") #二維對象 arr2 = nu.array([[1, 2, 3], [4,5,6]]) print(arr2) # 有行有列 # 相當於一個面,里面有多條線,一個列表里裝了多個一維 # 二維數組(用的最多的)
print("************************創建三維的ndarray對象**********************************") #創建三維的ndarray對象 arr3 = nu.array([[[1, 2, 3], [3,2,1]], [[4,5,6], [6,5,4]]]) print(arr3)
print("***********************shape(查看ndarray對象的形式)***********************************") # shape(查看ndarray對象的形式) arr4=nu.array( [[1, 2, 3, 4], [5, 6, 7, 8], [5, 6, 7, 8]]) print(arr4) # [[1 2 3 4] # [5 6 7 8] # [5 6 7 8]] cc=arr4.shape #獲得多維數組的行和列,以元組形式表現出來 print(cc) # (3, 4) # (矩陣的行數,矩陣的列數) print(arr4.shape[0]) # 獲取行 3 print(arr4.shape[1]) # 獲取列 4
print("**************************切分工具********************************") # 2.切分工具 arr5=nu.array([ [1, 2, 3, 4], [5, 44, 88, 8], [5, 6, 7, 8]]) print(arr5[2,3]) # 行和列索引都從0開始,取第2行第3列 # 8 print(arr5[0,:]) #第一行,第1,2,3,4列的數 # [1 2 3 4] print(arr5[:,0]) #所有行,第1列的數 # [1 5 5] print(arr5[0:]) # 沒有逗號的時候取出了全部 # [[1 2 3 4] # [5 6 7 8] # [5 6 7 8]] print(arr5[1,1:3]) #取第二行第第二個和第三個 # [44 88] print(arr5[arr5>3])#取大於3的值 # [ 4 5 44 88 8 5 6 7 8] #取第第一列大於3的值 arr_lien = arr5[:,0] print(arr_lien[arr_lien>3]) # [5 5] # 有一個多維數組存儲的是人的年齡,表格里有200歲以上的年齡 arr6 = nu.array([ [1000,2,300,4],[5,600,7,8],[5,6,700,8]]) # arr>200 """array([[ True, False, True, False], [False, True, False, False], [False, False, True, False]])""" print(arr6[arr6>200]) # [1000 300 600 700]
print("**************************多維數組的元素的替換********************************") # 多維數組的元素的替換 arr7=nu.array([ [1, 2, 3, 4], [5, 44, 88, 8], [5, 6, 7, 8]]) cc=arr7[1,2]=666 print(arr7) #數組中大於30的數替換成了99 bb=arr7[arr7>30]=99 print(bb) print(arr7) # 所有行,第1列的數 修改成11 dd=arr7[:,0]=11 print(dd) print(arr7)
print("**************************多維數組的合並********************************") # 多維數組的合並 arre = nu.array([[1, 2, 3],[4,5,6]]) arrr = nu.array([[3, 2, 4],[5,3,7]]) #vertical 垂直新的 l=nu.vstack((arre,arrr)) print(l) #horizon 水平的 k=nu.hstack((arre,arrr)) print(k) # concatenate 連接的意思,默認垂直合並 b=nu.concatenate((arre,arrr)) print(b) # print(nu.concatenate((arre,arrr),axis=0或1) #前面只能寫入一個容器,后面用axis控制豎着合並還是橫着合並 print(nu.concatenate((arrr,arre),axis=1)) # 3.生成布爾矩陣 arr = nu.array([[1, 2, 3], [4,5,6]]) print(arr>5) ''' [[False False False] [False False True]] '''
print("********************通過函數方法創建多維數組**************************************") a1=[i for i in range(10)] print(a1) # np.arage(起始值,結束值,步長)#顧頭不顧尾,用法類似for 循環中的range a2=[i for i in nu.arange(10)] print(a2) a3=[i for i in nu.arange(1,10,2)] print(a3) # .zeros/ones/eye # 構造3*4的全0矩陣 print(nu.zeros((3, 4))) #填的值為(行數,列數) """[[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]]""" # 構造3*4的全1矩陣 print(nu.ones((3, 4))) #填的值為(行數,列數) """[[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]]""" # 構造3個主元的單位矩陣 print(nu.eye(3)) #填的值為(主元的個數) ''' [[ 1. 0. 0.] [ 0. 1. 0.] [ 0. 0. 1.]] ''' # 2.linspace/logspace # 構造一個等差數列,取頭也取尾,從0取到20,取5個數 print(nu.linspace(0, 20, 5)) #[ 0. 5. 10. 15. 20.] # 構造一個等比數列,從10**0取到10**20,取5個數 print(nu.logspace(0, 20, 5)) # [1.e+00 1.e+05 1.e+10 1.e+15 1.e+20] # 意思就是 生成兩行兩列 為十個零的數 print(nu.zeros((2,2,2)))
print("********************矩陣的運算**************************************") # 兩個矩陣對應元素相加 # 兩個矩陣對應元素相減 # 兩個矩陣對應元素相乘 # / 兩個矩陣對應元素相除,如果都是整數則取商 # % 兩個矩陣對應元素相除后取余數 # n 單個矩陣每個元素都取n次方,如2:每個元素都取平方 ar = nu.array([[1, 2, 3],[4,5,6]]) er= nu.array([[3, 2, 4],[5,3,7]]) print(ar+er) """[[ 4 4 7] [ 9 8 13]]""" print(ar*2) """[[ 2 4 6] [ 8 10 12]]""" # 點乘和轉置(了解) 點乘必須 m*n n *m print(nu.dot(ar,er.T)) """[[19 32] [46 77]]""" # 求逆(了解) print(nu.linalg.inv(nu.dot(ar,er.T))) """[[-8.55555556 3.55555556] [ 5.11111111 -2.11111111]]""" # 獲取矩陣所有元素中的最大值 # print(ar.max()) # 獲取舉着每一列的最大值 # print(ar.max(axis=0)) # 獲取矩陣每一行的最大值 # print(ar.max(axis=1)) # 獲取矩陣最大元素的索引位置 # print(ar.argmax(axis=1) # 獲取矩陣所有元素的平均值 # print(ar.mean()) # 獲取矩陣每一列的平均值 # print(ar.mean(axis=0)) # 獲取矩陣每一行的平均值 # print(ar.mean(axis=1)) # 獲取矩陣所有元素的方差 # print(ar.var()) # 獲取矩陣每一列的元素的方差 # print(ar.var(axis=0)) # 獲取矩陣每一行的元素的方差 # print(ar.var(axis=1))
print("********************numpy生成隨機數**************************************") # https://www.cnblogs.com/pythonywy/p/11010790.html # https://www.cnblogs.com/geyatou322/p/11012088.html # https://www.runoob.com/numpy/numpy-tutorial.html # RandomState()方法會讓數據值隨機一次,之后都是相同的數據 rs = nu.random.RandomState(1) print(rs.rand(10)) # 構造3*4的均勻分布的矩陣 # seed()方法會讓數據值隨機一次,之后都是相同的數據 np.random.seed(1) print(nu.random.rand(3, 4)) # 構造3*4*5的均勻分布的矩陣 print(nu.random.rand(3, 4, 5)) # 構造3*4的正態分布的矩陣 print(nu.random.randn(3, 4)) # 構造取值為1-5內的10個元素的ndarray數組 print(nu.random.randint(1, 5, 10)) # 構造取值為0-1內的3*4的矩陣 print(nu.random.random_sample((3, 4))) # 隨機選取arr中的兩個元素 print(nu.random.choice(arr, size=2))
# https://www.runoob.com/w3cnote/python-pip-install-usage.html