Numpy

NumPy基础之矩阵的运算

2018-09-09  本文已影响30人  5f2a6061653d

矩阵运算

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

  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
上一篇下一篇

猜你喜欢

热点阅读