Tensorflow:numpy基础
tensorflow的运算基于numpy,numpy是矩阵数学运算的库。
-
numpy向量和矩阵乘法
1.1 向量点乘
>>> import numpy as np >>> a = np.array([2,0]) >>> b=np.array([1,1]) >>> np.dot(a,b) 2
1.2 矩阵乘法
>>> import numpy as np >>> a = np.array([[1,2],[2,2],[3,4]]) >>> b = np.array([[3,4,5,6],[4,5,6,7]]) >>> print(a.shape, b.shape) (3, 2) (2, 4) >>> c = a.matmul(a,b) >>> print(c.shape) (3, 4)
-
opencv和numpy
2.1 opencv读取的数据和numpy可以无缝转换
>>> import cv2 >>> img = cv2.imread(r"G:\model\target\target\380740c40a2f48bc942093c3e3b0b2e268.png") >>> print(img.shape) (130, 320, 3)
2.2 shape依次为hwc
h=130, w=320, c=3,c是channel通道,依次是b,g,r,取值都是0-255。
2.3 numpy的基础运算,传播(broadcast)
>>> a = np.array([[2,4,6,7],[1,3,5,6],[4,4,2,9]]) >>> print(a.shape) (3, 4) >>> print(a) [[2 4 6 7] [1 3 5 6] [4 4 2 9]] >>> b=a/2 >>> print(b) [[1. 2. 3. 3.5] [0.5 1.5 2.5 3. ] [2. 2. 1. 4.5]] >>> c = np.array([2,1,1,2]) >>> print(a*c) [[ 4 4 6 14] [ 2 3 5 12] [ 8 4 2 18]] >>> d=np.array([[2,1,1,2],[0.5,1,1,0.5],[2,1,1,2]]) >>> print(a*d) [[ 4. 4. 6. 14. ] [ 0.5 3. 5. 3. ] [ 8. 4. 2. 18. ]]
简记:
加减乘除一个数,所有元素都加减乘除
加减乘除一个和最后一个维度相同的数组,最后一个维度对应位置进行加减乘除
加减乘除一个和自己维度相同的矩阵,对应位置进行加减乘除
2.4 numpy的切片
>>> a = np.array([[2,4,6,7],[1,3,5,6],[4,4,2,9]]) >>> print(a.shape) (3, 4) >>> print(a) [[2 4 6 7] [1 3 5 6] [4 4 2 9]] >>> print(a[1:,1:]) [[3 5 6] [4 2 9]] >>> print(a[0:2,1:2]) [[4] [3]]
注意:切片的区间前闭后开