Python numpy向量以及Broadcasting
阿新 • • 發佈:2018-12-09
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.
[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]]
-