本次笔记学习教程出自: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 '+str(a)+' and the shape is '+str(a.shape)+' 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]]