美文网首页Numpy
NumPy基础之矩阵的运算

NumPy基础之矩阵的运算

作者: 5f2a6061653d | 来源:发表于2018-09-09 20:31 被阅读30次

    矩阵运算

    矩阵运算包括矩阵的加法、减法、乘法(相乘与点乘)、矩阵的转置等,接下来详细讲解矩阵运算。

    1. 矩阵的加减法,具体示例如下所示:
    In [103]: import numpy as np
    In [104]: a = np.random.randint(10,size = 20).reshape(4,5)
    In [105]: b = np.random.randint(10,size = 20).reshape(4,5)
    In [106]: c = np.mat(a)
    In [107]: d = np.mat(b)
    In [108]: e = c + d
    In [109]: f = c - d
    

    上述代码是两矩阵的加减法运算,其中In [104] 和In [105]是创建两个4×5的随机数组并分别赋值给变量a,b;In [106]和In [107]是将数组转换成相应的矩阵并分别赋值给变量c,d;In [108]是将矩阵的加法运算结果赋值给变量e;In [109]是将矩阵的减法运算结果赋值给变量f;c,d,e,f的运行结果如下所示:

    In [110]: c
    Out[110]:
    matrix([[1, 2, 8, 7, 9],
            [9, 5, 4, 7, 0],
            [1, 1, 7, 7, 1],
            [8, 3, 5, 2, 8]])
    In [111]: d
    Out[111]:
    matrix([[6, 3, 4, 5, 7],
            [3, 6, 7, 6, 5],
            [6, 3, 3, 8, 6],
            [6, 7, 1, 6, 2]])
    In [112]: e
    Out[112]:
    matrix([[ 7,  5, 12, 12, 16],
            [12, 11, 11, 13,  5],
            [ 7,  4, 10, 15,  7],
            [14, 10,  6,  8, 10]])
    In [113]: f
    Out[113]:
    matrix([[-5, -1,  4,  2,  2],
            [ 6, -1, -3,  1, -5],
            [-5, -2,  4, -1, -5],
            [ 2, -4,  4, -4,  6]])
    

    从上述运行结果可以看出矩阵的减法与数组的加减法运算相似,都是相同位置数据进行加减运算,并且同样要求相互运算的矩阵含有相同的行列数。

    1. 矩阵的乘法(相乘与点乘)
      矩阵的相乘,具体示例如下所示:
    In [114]: import numpy as np
    In [115]: a = np.random.randint(10,size = 20).reshape(4,5)
    In [116]: b = np.random.randint(10,size = 20).reshape(5,4)
    In [117]: c = np.mat(a)
    In [118]: d = np.mat(b)
    In [119]: e = c * d
    

    上述代码是两矩阵的相乘运算,其中In [115] 和In [116]是创建一个4×5的随机数组和一个5×4的随机数组并分别赋值给变量a,b;In [117]和 In [118]是将数组转换成相应的矩阵并分别赋值给变量c,d;In [119]是将矩阵的相乘运算结果赋值给变量e; c,d,e的运行结果如下所示:

    In [120]: c
    Out[120]:
    matrix([[7, 5, 3, 5, 2],
            [5, 4, 3, 3, 0],
            [3, 9, 9, 6, 6],
            [1, 3, 4, 5, 6]])
    In [121]: d
    Out[121]:
    matrix([[6, 6, 1, 6],
            [4, 5, 5, 0],
            [5, 2, 0, 8],
            [0, 3, 0, 2],
            [1, 4, 6, 3]])
    In [122]: e
    Out[122]:
    matrix([[ 79,  96,  44,  82],
            [ 61,  65,  25,  60],
            [105, 123,  84, 120],
            [ 44,  68,  52,  66]])
    

    从上述运行结果可以看出,一个4×5的矩阵与一个5×4的矩阵相乘最终得到一个4×4的矩阵。矩阵的相乘运算要求两相乘矩阵的行数等于列数,即当满足矩阵a的行数等于矩阵b的列数,矩阵b的行数等于矩阵a的行数,矩阵a与矩阵b才能进行相乘,并且二者相乘顺序不同也会导致结果不同,具体相乘规则如下图所示。


    矩阵相乘运算规则.jpg

    矩阵的点乘,具体示例如下所示:

    In [123]: import numpy as np
    In [124]: a = np.random.randint(10,size = 20).reshape(4,5)
    In [125]: b = np.random.randint(10,size = 20).reshape(4,5)
    In [126]: c = np.mat(a)
    In [127]: d = np.mat(b)
    In [128]: e = np.multiply(a,b)
    

    上述代码是两矩阵的相乘运算,其中In [124] 和In [125]是创建两个4×5的随机数组并分别赋值给变量a,b;In [126]和In [127]是将数组转换成相应的矩阵并分别赋值给变量c,d;In [128]是将矩阵的点乘运算结果赋值给变量e; c,d,e的运行结果如下所示:

    In [129]: c
    Out[129]:
    matrix([[4, 0, 8, 6, 4],
            [7, 9, 4, 9, 9],
            [9, 3, 1, 2, 5],
            [7, 9, 3, 6, 1]])
    In [130]: d
    Out[130]:
    matrix([[0, 4, 6, 3, 4],
            [5, 2, 1, 8, 8],
            [5, 2, 4, 5, 8],
            [9, 4, 8, 7, 8]])
    In [131]: e
    Out[131]:
    array([[ 0,  0, 48, 18, 16],
           [35, 18,  4, 72, 72],
           [45,  6,  4, 10, 40],
           [63, 36, 24, 42,  8]])
    

    矩阵的点乘运算与数组乘法相似,也需要相互运算的矩阵行列数相同,所不同的是矩阵点乘使用的np.multiple(a,b)函数进行运算,而数组直接是a*b。

    1. 矩阵的转置,具体示例如下所示:
    In [132]: import numpy as np
    In [133]: a = np.random.randint(10,size = 20).reshape(4,5)
    In [134]: b = np.mat(a)
    In [135]: c = b.T
    

    上述代码是矩阵的转置,其中In [133]是创建一个4×5的随机数组并赋值给变量a;In [134]是将数组转换成相应的矩阵并赋值给变量b;In [135]是求矩阵的转置并将结果赋值给变量c;a,b,c的运行结果如下所示:

    In [136]: a
    Out[136]:
    array([[6, 3, 5, 7, 0],
           [6, 9, 4, 0, 2],
           [2, 2, 5, 3, 9],
           [2, 1, 8, 3, 7]])
    In [137]: b
    Out[137]:
    matrix([[6, 3, 5, 7, 0],
            [6, 9, 4, 0, 2],
            [2, 2, 5, 3, 9],
            [2, 1, 8, 3, 7]])
    In [138]: c
    Out[138]:
    matrix([[6, 6, 2, 2],
            [3, 9, 2, 1],
            [5, 4, 5, 8],
            [7, 0, 3, 3],
            [0, 2, 9, 7]])
    

    矩阵的转置即将矩阵的行列相互转置,因此a×b的矩阵转置之后会得到b×a的矩阵,正如上述运行结果所示,4×5的矩阵b转置之后得到5×4的矩阵c。具体转置原理如下图所示。

    转置原理.png

    相关文章

      网友评论

        本文标题:NumPy基础之矩阵的运算

        本文链接:https://www.haomeiwen.com/subject/rbcbbftx.html