目錄python
回顧一下有哪些數據類型數組
int/float/str/list/tuple/dict/set框架
numpy是python一種開源的數值計算擴展庫.這種庫可用來存儲和處理大型矩陣,比python自身的嵌套列表結構要高效的多(該結構也能夠用來表示矩陣)dom
做用:
1.區別於list列表,提供了數組操做、數組運算、以及統計分佈和簡單的數學模型
2.計算速度快,甚至優於python內置的簡單運算,使其成爲pandas、sklearn等模塊的依賴包。高級的框架如TensorFlow、PyTorch等,其數組操做也和numpy很是類似函數
矩陣即numpy的np.array對象,建立矩陣就是把==列表==傳入np.array()學習
import numpy as np
lis =[1,2,3] lis
[1, 2, 3]
np.array(lis)
array([1, 2, 3])
arr = np.array([ [1,2,3,4], [5,6,7,8] ]) arr #在pycharm中須要print(arr)
array([[1, 2, 3, 4], [5, 6, 7, 8]])
學習numpy的方法使用,先來聯想一下list的內置方法使用
1.索引
2.切片
3.長度
4.成員運算
5.for循環
6.其餘一些內置方法code
比較一下 np.array 和 list 的區別
1.np.array是多維的,list是一維的
2.list對一維數組作一些操做,numpy其實就是對多維作操做對象
arr =np.array([ [1,2,3,4],[5,6,7,8],[5,6,7,8]]) arr
array([[1, 2, 3, 4], [5, 6, 7, 8], [5, 6, 7, 8]])
arr.shape #得到多維數組的行和列,以元組形式表現出來
(3, 4)
arr.shape[0] #多維數組的行
3
arr.shape[1] #多維數組的列
4
print(arr.shape) print(arr.shape[0]) arr.shape[1]
(3, 4) 3 4
arr.shape arr.shape[1] arr.shape[0]
3
arr.shape ,按照代碼運行,直接運行最後一個結果顯示處理,用print方法就能夠把每個方法打印出來索引
lis = [1,2,3,4] #lis[-1] lis[3]
4
arr
array([[1, 2, 3, 4], [5, 6, 7, 8], [5, 6, 7, 8]])
arr #jupyter中前面運行的結果能夠直接用,若是前面arr未運行生成,就會報錯pycharm
arr[1,1] # 行和列索引都從0開始,取第2行第2列
6
arr[0,[0,1,2,3]] #第一行,第1,2,3,4列的數
array([1, 2, 3, 4])
arr[0,:] #第一行,第1,2,3,4列的數
array([1, 2, 3, 4])
arr[0:] #沒有逗號的時候取出了所有
array([[1, 2, 3, 4], [5, 6, 7, 8], [5, 6, 7, 8]])
arr[:,0] #全部行,第1列的數
array([1, 5, 5])
arr = np.array([ [1000,2,300,4],[5,600,7,8],[5,6,700,8]]) arr
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]])
arr[arr>200] #取出數組中大於200的元素,並一維數組表現出來
array([1000, 300, 600, 700])
lis =[1,2,3,4] lis[0]=9 lis
[9, 2, 3, 4]
arr
array([[1000, 2, 300, 4], [ 5, 600, 7, 8], [ 5, 6, 700, 8]])
arr[1,1]=0 arr
array([[1000, 2, 300, 4], [ 5, 0, 7, 8], [ 5, 6, 700, 8]])
arr[0,:]=0 arr
array([[ 0, 0, 0, 0], [ 5, 0, 7, 8], [ 5, 6, 700, 8]])
arr = np.array([ [1000,2,300,4],[5,600,7,8],[5,6,700,8]]) arr
array([[1000, 2, 300, 4], [ 5, 600, 7, 8], [ 5, 6, 700, 8]])
arr[arr>200]=0 #數組中大於200的數替換成了0 arr
array([[0, 2, 0, 4], [5, 0, 7, 8], [5, 6, 0, 8]])
## 多維數組的合併
arr1=np.array([ [1,2,3,4],[5,6,7,8]]) arr1
array([[1, 2, 3, 4], [5, 6, 7, 8]])
arr2=np.array([ [9,10,11,12],[13,14,15,16]]) arr2
array([[ 9, 10, 11, 12], [13, 14, 15, 16]])
* vstack 和 hstack 只能放一個參數,這個參數必須是容器
np.vstack((arr1,arr2)) #vertical 垂直新的
array([[ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12], [13, 14, 15, 16]])
np.hstack((arr1,arr2)) #horizon 水平的
array([[ 1, 2, 3, 4, 9, 10, 11, 12], [ 5, 6, 7, 8, 13, 14, 15, 16]])
np.concatenate((arr1,arr2)) # concatenate 鏈接的意思,默認垂直合併
array([[ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12], [13, 14, 15, 16]])
==在numpy中,爲了統一作處理,只要有axis參數的,axis=0就是列,axis=1就是行
np.concatenate((arr1,arr2),axis=1) #水平
array([[ 1, 2, 3, 4, 9, 10, 11, 12], [ 5, 6, 7, 8, 13, 14, 15, 16]])
np.concatenate((arr1,arr2),axis=0)#垂直,默認垂直
array([[ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12], [13, 14, 15, 16]])
[i for i in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.arange(1,10,2)
array([1, 3, 5, 7, 9])
# ones np.ones((3,4)) #默認是浮點型 # np.ones((3,4),dtype=int)
array([[1., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.]])
np.ones((3,4),dtype=int)
# zeros np.zeros((3,4))
array([[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.]])
np.zeros((3,4,5)) #5控制一維,4,5控制二維,3,4,5控制三維
array([[[0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.]], [[0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.]], [[0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.]]])
np.zeros((3,4,5))
array([[[0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.]], [[0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.]], [[0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.], [0., 0., 0., 0., 0.]]])
## eye np.eye(5) #5,5 5行和5列
array([[1., 0., 0., 0., 0.], [0., 1., 0., 0., 0.], [0., 0., 1., 0., 0.], [0., 0., 0., 1., 0.], [0., 0., 0., 0., 1.]])
arr1
array([[1, 2, 3, 4], [5, 6, 7, 8]])
arr2
array([[ 9, 10, 11, 12], [13, 14, 15, 16]])
arr1+arr2
array([[10, 12, 14, 16], [18, 20, 22, 24]])
arr1*2
array([[ 2, 4, 6, 8], [10, 12, 14, 16]])
arr1
array([[1, 2, 3, 4], [5, 6, 7, 8]])
arr2
array([[ 9, 10, 11, 12], [13, 14, 15, 16]])
np.dot(arr1,arr2.T)
array([[110, 150], [278, 382]])
np.linalg.inv(np.dot(arr1,arr2.T))
array([[ 1.19375, -0.46875], [-0.86875, 0.34375]])
arr1
array([[1, 2, 3, 4], [5, 6, 7, 8]])
arr1.max()
8
arr1.min()
1
固定隨機數,讓它不隨機
np.random.rand(3,4)
array([[0.20445225, 0.87811744, 0.02738759, 0.67046751], [0.4173048 , 0.55868983, 0.14038694, 0.19810149], [0.80074457, 0.96826158, 0.31342418, 0.69232262]])
np.random.seed(1) #永不隨機,固定,若是不加,每運行一次結果都不同 np.random.rand(3,4)
array([[4.17022005e-01, 7.20324493e-01, 1.14374817e-04, 3.02332573e-01], [1.46755891e-01, 9.23385948e-02, 1.86260211e-01, 3.45560727e-01], [3.96767474e-01, 5.38816734e-01, 4.19194514e-01, 6.85219500e-01]])
rs =np.random.RandomState(1) #第二種方法 rs.rand(3,4)
array([[4.17022005e-01, 7.20324493e-01, 1.14374817e-04, 3.02332573e-01], [1.46755891e-01, 9.23385948e-02, 1.86260211e-01, 3.45560727e-01], [3.96767474e-01, 5.38816734e-01, 4.19194514e-01, 6.85219500e-01]])