1. 程式人生 > >numpy中陣列和矩陣的區別

numpy中陣列和矩陣的區別

  • matrix是array的分支,matrix和array在很多時候都是通用的,用哪一個都一樣;
  • 如果兩個可以通用,那就選擇array,因為array更靈活,速度更快,很多人把二維的array也翻譯成矩陣。
  • 相同點:索引方式相同,都可以使用a[i][j],a[i,j]進行索引
  • matrix(矩陣):
  1. 具有相對簡單的運算子號,比如兩個matrix相乘(求內積),就是用符號*
  • array(陣列):
  • 1.兩個一維陣列相乘用*,對應元素相乘
  • import numpy as np
    a=np.array([1,2,3,4])
    b=np.array([2,3,4,5])
    print(a*b)
    print(sum(a*b))
    
    #結果
    [ 2  6 12 20]
    40

     

  1. 多維陣列也可以看成矩陣,如果進行矩陣相乘(求內積),則需要用到np.dot(),如np.dot(arr.T,arr)
  • 兩者轉換:
  • import numpy as np
    
    """rand函式的作用就是從標準正態分佈中返回一個或多個樣本值,
        這裡返回2行3列共6個數的陣列。
    標準正態分佈俗稱高斯分佈,均值為0,方差為1的正態分佈。"""
    
    arr=np.random.rand(2,3)
    b=np.dot(arr.T,arr)  #把陣列當成矩陣,對應元素相乘求內積
    #將陣列轉化成矩陣
    arr_Matrix=mat(arr)  #等同於arr_Matrix=matrix(arr) ,mat是matrix的縮寫
    c=arr_Matrix.T * arr_Matrix  #矩陣直接相乘
    
    #將結果輸出
    print("arr:\n{}\ntype(arr):{}".format(arr,type(arr)))
    print("陣列(矩陣)內積:\n",b)
    
    print("arr_Matrix:\n{}\ntype(arr_Matrix):{}".format(arr_Matrix,type(arr_Matrix)))
    print("矩陣乘積:\n",c)
    
    #比較兩者乘積是否相等
    print("陣列矩陣內積=矩陣乘積:\n",b==c)
    
    
    #執行結果如下:
    arr:
    [[0.93383594 0.70401786 0.95323492]
     [0.7970047  0.21436019 0.24329003]]
    type(arr):<class 'numpy.ndarray'>
    陣列(矩陣)內積:
     [[1.50726605 0.82828326 1.08406832]
     [0.82828326 0.54159144 0.72324611]
     [1.08406832 0.72324611 0.96784685]]
    arr_Matrix:
    [[0.93383594 0.70401786 0.95323492]
     [0.7970047  0.21436019 0.24329003]]
    type(arr_Matrix):<class 'numpy.matrixlib.defmatrix.matrix'>
    矩陣乘積:
     [[1.50726605 0.82828326 1.08406832]
     [0.82828326 0.54159144 0.72324611]
     [1.08406832 0.72324611 0.96784685]]
    陣列矩陣內積=矩陣乘積:
     [[ True  True  True]
     [ True  True  True]
     [ True  True  True]]