1. 程式人生 > >Python numpy向量以及Broadcasting

Python numpy向量以及Broadcasting

Python numpy向量以及Broadcasting

  1. 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)
      
  2. 廣播

    • 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]]