Python numpy向量以及Broadcasting
-
numpy 向量
-
rank 为 1 的数组
这种数组既不是行向量也不是列向量 一般不要使用
A=np.array([1,2,3,4]) B=np.random.rand(4) print(A.shape) print(B.shape)
[1 2 3 4] # 只有一对[] (4,) (4,)
进行reshape,转置,以及相乘等操作
C=np.array([1,2,3,4]) print(A.T) print(A.T.shape) print(A*C) print(A.T*C) A.reshape((1,4)) print(A.shape)
[1 2 3 4] (4,) [ 1 4 9 16] [ 1 4 9 16] (4,)
-
行向量
shape 为(1,n)且 打印出来有**[[]]**
a=np.random.rand(1,5) b=np.array([[1,2,3,4,5]]) print(a) print(a.shape) print(b.shape)
[[0.12113369 0.60376285 0.44217653 0.44889013 0.07068028]] (1, 5) (1, 5)
-
列向量
shape为(m,1) 注意输出的样子
d=np.random.rand(5,1) e=np.array([[1],[2],[3],[4],[5]]) print(d) print(d.shape) print(e.shape)
[[0.63605009] [0.9447894 ] [0.47357514] [0.0363985 ] [0.24551971]] (5, 1) (5, 1)
-
-
广播
-
broadcasting
适用于加减乘除等b=np.array([[1,2,3,4,5]]) e=np.array([[1],[2],[3],[4],[5]]) print(b*e) print(e*b)
[[ 1 2 3 4 5] [ 2 4 6 8 10] [ 3 6 9 12 15] [ 4 8 12 16 20] [ 5 10 15 20 25]] [[ 1 2 3 4 5] [ 2 4 6 8 10] [ 3 6 9 12 15] [ 4 8 12 16 20] [ 5 10 15 20 25]]
实际上是变成了,且乘法是每一位对应相乘
[[1,2,3,4,5] [[1,1,1,1,1] [1,2,3,4,5 [2,2,2,2,2] [1,2,3,4,5] * [3,3,3,3,3] [1,2,3,4,5] [4,4,4,4,4] [1,2,3,4,5]] [5,5,5,5,5]]
-
点乘
print(np.dot(b,e)) print(np.dot(e,b))
[[55]] [[ 1 2 3 4 5] [ 2 4 6 8 10] [ 3 6 9 12 15] [ 4 8 12 16 20] [ 5 10 15 20 25]]
-