numpy的學習筆記
阿新 • • 發佈:2020-08-29
本次筆記學習教程出自:https://cs231n.github.io/python-numpy-tutorial/
Numpy的使用:
import numpy as np
1.numpy陣列的基本使用和操作:
import numpy as np a=np.array([[1,2,3],[4,5,6]])#自定義一個Numpy陣列a print('array a is \n'+str(a)+'\n and the shape is '+str(a.shape)+'\n and the type is '+str(type(a))) #Prints " #array a is #[[1 2 3]# [4 5 6]] # and the shape is (2, 3) # and the type is <class 'numpy.ndarray'> #" #a.shape可以得到陣列a的形狀 print(a[0,0],a[0,1],a[1,0])#引用陣列具體元素 a[0,0]=99 #更改陣列的元素值的方法和變化列表的方法一樣 print(a) #建立各種特殊矩陣/陣列: b=np.zeros((3,2)) print('b is '+str(b)) b=np.ones((2,3)) print('b is '+str(b)) b=np.full((2,2),7) print('b is '+str(b)) b=np.eye(3)#建立單位矩陣 print('b is '+str(b)) b=np.random.random((3,1))#建立隨機矩陣,但元素只是在(0,1)之間隨機 print('b is '+str(b))
2.切片操作:
import numpy as np a=np.array([[1,2,3],[4,5,6],[7,8,9]]) b=a[:2,1:3]#切片,只取[0,2)行和[1,3)列的交集 print(a) print(b) c=a[1,1:3]#切出來的只是一行數字,不算是個矩陣 d=a[1:2,1:3]#切出來的是一個1*2的矩陣print(c,c.shape) print(d,d.shape) a=np.array([[1,2],[3,4],[5,6]]) print(a) print(a[[0,1,2],[0,1,0]])#輸出a[0,0],a[1,1],a[2,0] a=np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]]) b=np.array([0,2,0,1]) print(a[np.arange(4),b])#np.arange(4)=[0.1.2.3] print(a) a[np.arange(4),b]+=10 print(a)
import numpy as np #布林型別陣列索引 a=np.array([[1,2],[3,4],[5,6]]) bool_idx=(a>3) print(bool_idx) #prints [[False False] # [False True] # [ True True]] print(a[bool_idx]) #prints [4 5 6]
import numpy as np a=np.array([[1,2],[2,3]]) print(a.dtype)#顯示陣列的資料型別 #numpy陣列的運算 b=np.array([[2,3],[4,5]]) #加法 print(a+b) #相當於 print(np.add(a,b)) #減法 print(a-b) #相當於 print(np.subtract(a,b)) #乘法,不是矩陣乘法 print(a*b) print(np.multiply(a,b)) #除法 print(a/b) print(np.divide(a,b)) #開方 print(np.sqrt(a)) #矩陣乘法 print(a.dot(b)) print(np.dot(a,b)) #prints [[10 13] # [16 21]] print(b.dot(a)) print(np.dot(b,a)) #prints [[ 8 13] # [14 23]]
import numpy as np print(a) #sum運算 a=np.array([[[1,2],[3,4]],[[5,6],[7,8]]]) print(np.sum(a))#所有元素相加 print(np.sum(a,axis=0))#三維陣列中的第一個向量上相加 #prints [[ 6 8] # [10 12]] print(np.sum(a,axis=1))#列上相加 #prints [[ 4 6] # [12 14]] print(np.sum(a,axis=2))#行上相加 #prints [[ 3 7] # [11 15]] #轉置矩陣 print(a.T)
#Broadcasting import numpy as np x=np.array([[1,2,3],[4,5,6],[7,8,9]]) v=np.array([1,0,1]) y=np.empty_like(x)#y=x print(y) for i in range(3): y[i,:]=x[i,:]+v print(y) a=np.array([1,2,3]) b=np.array([4,5]) print(np.reshape(a,(3,1))*b) #先使得v從(3,)的shape變成(3,1),然後再和b廣播變成shape為(3,2) #prints [[ 4 5] # [ 8 10] # [12 15]]