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

猜你喜欢

转载自blog.csdn.net/Hi_maxin/article/details/83960486
今日推荐