【Pythonベースシリーズ1】numpyモジュールによるマトリクス関連操作

6228 ワード

Pythonのnumpyライブラリはマトリクス関連の操作を容易に行うことができます.本文の主な参考https://www.cnblogs.com/chamie/p/4870078.html自分で書いた他の内容を追加して、記録して、自分が必要とする学生が調べるのに便利です.権利侵害は削除されます.
目次
  • numpy導入
  • マトリックス作成
  • 行列変換、分割
  • 特徴値、特徴ベクトル、行列式、奇異値分解など
  • を求める.
  • マトリックス、リスト、配列の変換
  • 1.numpyインポート
    from numpy import *    #  numpy    
    import numpy as np     #        ,np      ,     。

    2.マトリックス作成
    2.1次元または2次元の配列を使用して作成
    >>> from numpy import *
    >>> a1=array([1,2,3])
    >>> a1
    array([1, 2, 3])
    >>> a1=mat(a1)
    >>> a1
    matrix([[1, 2, 3]])
    >>> shape(a1)    #      
    (1, 3)
    >>> b=matrix([1,2,3])
    >>> shape(b)
    (1, 3)

    2.2一般的な作成方法
    >>>data1=mat(zeros((3,3))) #    3*3    ,    zeros        tuple  (3,3)
    >>> data1
    matrix([[ 0.,  0.,  0.],
            [ 0.,  0.,  0.],
            [ 0.,  0.,  0.]])
    >>>data2=mat(ones((2,4))) #    2*4 1  ,         ,     int  ,    dtype=int
    >>> data2
    matrix([[ 1.,  1.,  1.,  1.],
            [ 1.,  1.,  1.,  1.]])
    >>>data3=mat(random.rand(2,2)) #   random      numpy  random  ,random.rand(2,2)          ,       #matrix
    >>> data3
    matrix([[ 0.57341802,  0.51016034],
            [ 0.56438599,  0.70515605]])
    >>>data4=mat(random.randint(10,size=(3,3))) #    3*3 0-10         ,                 
    >>> data4
    matrix([[9, 5, 6],
            [3, 0, 4],
            [6, 0, 7]])
    >>>data5=mat(random.randint(2,8,size=(2,5))) #    2-8         
    >>> data5
    matrix([[5, 4, 6, 3, 7],
            [5, 3, 3, 4, 6]])
    >>>data6=mat(eye(2,2,dtype=int)) #    2*2     
    >>> data6
    matrix([[1, 0],
            [0, 1]])
    
    a1=[1,2,3]
    a2=mat(diag(a1)) #        1、2、3     
    >>> a2
    matrix([[1, 0, 0],
            [0, 2, 0],
            [0, 0, 3]])

     
    3.一般的な演算
    3.1行列乗算
    #    
    >>>a1=mat([1,2]);      
    >>>a2=mat([[1],[2]]);
    >>>a3=a1*a2 #1*2     2*1   ,  1*1   
    >>> a3
    matrix([[5]])
    
    #      
    >>>a1=mat([1,1]);
    >>>a2=mat([2,2]);
    >>>a3=multiply(a1,a2)
    >>> a3
    matrix([[2, 2]])
    
    #    
    >>>a1=mat([2,2]);
    >>>a2=a1*2>>>a2
    matrix([[4, 4]])

    3.2求逆と転置
    #    
    >>>a1=mat(eye(2,2)*0.5)
    >>> a1
    matrix([[ 0.5,  0. ],
            [ 0. ,  0.5]])
    >>>a2=a1.I  #   matrix([[0.5,0],[0,0.5]])    
    >>> a2
    matrix([[ 2.,  0.],
            [ 0.,  2.]])
    
    #    
    >>> a1=mat([[1,1],[0,0]])
    >>> a1
    matrix([[1, 1],
            [0, 0]])
    >>> a2=a1.T
    >>> a2
    matrix([[1, 0],
            [1, 0]])

    3.3行列の合計、最大最小値
    >>>a1=mat([[1,1],[2,3],[4,2]])
    >>> a1
    matrix([[1, 1],
            [2, 3],
            [4, 2]])
    
    #     、   
    >>>a2=a1.sum(axis=0) #  ,      1*2   
    >>> a2
    matrix([[7, 6]])
    >>>a3=a1.sum(axis=1) #  ,      3*1   
    >>> a3
    matrix([[2],
            [5],
            [6]])
    >>>a4=sum(a1[1,:])  #          ,          
    >>> a4
                       # 0 :1+1; 2 :2+3; 3 :4+2
    
    #    、      
    >>>a1.max()   #  a1           ,            
    >>>a2=max(a1[:,1]) #         ,        1*1   
    >>> a2
    matrix([[3]])
    >>>a1[1,:].max()  #         ,            
    >>>np.max(a1,0)  #         ,      numpy  max  
    matrix([[4, 3]])
    >>>np.max(a1,1)  #         ,         
    matrix([[1],
            [3],
            [4]])
    >>>np.argmax(a1,0) #                  
    matrix([[2, 1]])
    >>>np.argmax(a1[1,:])  #                 
    

    3.4マトリックスのスライスとマージ
    #  
    >>>a=mat(ones((3,3)))
    >>> a
    matrix([[ 1.,  1.,  1.],
            [ 1.,  1.,  1.],
            [ 1.,  1.,  1.]])
    >>>b=a[1:,1:]  #                       
    >>> b
    matrix([[ 1.,  1.],
            [ 1.,  1.]])
    
    #  
    >>>a=mat(ones((2,2)))
    >>> a
    matrix([[ 1.,  1.],
            [ 1.,  1.]])
    >>>b=mat(eye(2))
    >>> b
    matrix([[ 1.,  0.],
            [ 0.,  1.]])
    >>>c=vstack((a,b))  #    ,     
    >>> c
    matrix([[ 1.,  1.],
            [ 1.,  1.],
            [ 1.,  0.],
            [ 0.,  1.]])
    >>>d=hstack((a,b))  #    ,     ,    
    >>> d
    matrix([[ 1.,  1.,  1.,  0.],
            [ 1.,  1.,  0.,  1.]])

    4.特徴値、特徴ベクトル、行列式、奇異値分解などを求める
    import numpy as np
    M = np.array([[1,1],[7,7]])
    
    #    a     b
    a, b = np.linalg.eig(M)
    print(a, b)
    
    #    
    e = np.linalg.det(M)
    print(e)
    
    #      U,   D,     Vt
    U, D, Vt = np.linalg.svd(M)
    print(U, D, Vt)
    

    5.マトリックス、リスト、配列の変換
    #      ,                 ,  :
    l1=[[1],'hello',3]
    
    #numpy   ,                  ,        :
    >>>a=array([[2],[1]])
    >>> a
    array([[2],
           [1]])
    >>>dimension=a.ndim
    >>> dimension
    >>>m,n=a.shape
    >>> m
    >>> n
    >>>number=a.size #     
    >>> number
    >>>str=a.dtype #     
    >>> str
    dtype('int64')
    
    #numpy   、  、        
    >>>a1=[[1,2],[3,2],[5,2]]  #  
    >>> a1
    [[1, 2], [3, 2], [5, 2]]
    >>>a2=array(a1)  #          
    >>> a2
    array([[1, 2],
           [3, 2],
           [5, 2]])
    >>>a3=mat(a1)  #        
    >>> a3
    matrix([[1, 2],
            [3, 2],
            [5, 2]])
    >>>a4=array(a3)  #        
    >>> a4
    array([[1, 2],
           [3, 2],
           [5, 2]])
    >>>a41=a3.getA()  #        
    >>>a41
    array([[1,2]
           [3,2]
           [5,2]])
    >>>a5=a3.tolist()  #        
    >>> a5
    [[1, 2], [3, 2], [5, 2]]
    >>>a6=a2.tolist()  #        
    >>> a6
    [[1, 2], [3, 2], [5, 2]]
    
    #      ,         ,           ,   tolist()          ,          。  :
    >>>a1=[1,2,3]   #  
    >>>a2=array(a1)
    >>> a2
    array([1, 2, 3])
    >>>a3=mat(a1)
    >>> a3
    matrix([[1, 2, 3]])
    >>> a4=a2.tolist()
    >>> a4
    [1, 2, 3]
    >>> a5=a3.tolist()
    >>> a5
    [[1, 2, 3]]
    >>> a6=(a4==a5)
    >>> a6
    False
    >>> a7=(a4 is a5[0])
    >>> a7
    True
    
    #       ,        :
    >>> dataMat=mat([1])
    >>> val=dataMat[0,0]  #                 ,         
    >>> val
    1