加微信进交流群:xituxiaoshutong100

矩阵运算

ML/DL 迷途小书童 0评论

软硬件环境

  • ubuntu 18.04 64bit
  • numpy 1.19.2
  • opencv 4.4.0

简介

矩阵的常用运算包括: 加法、减法、点乘、点除和乘法等。

加法运算

矩阵的加法就是2个矩阵对应位置的数值相加。

In [1]: import numpy as np

In [2]: m1 = np.array([[1, 2, 3], [4, 5, 6]] ,np.uint8)

In [3]: m2 = np.array([[4, 5, 6], [7, 8, 9]] ,np.uint8)

In [4]: s = m1 + m2

In [5]: s
Out[5]:
array([[ 5,  7,  9],
       [11, 13, 15]], dtype=uint8)

In [6]: 

上例中数据类型都是unit8,如果2个矩阵数据类型不同,如uint8float32,这时候经过加法运算后的数据类型就是float32了,取数值范围更大的类型

opencv中,同样可以进行矩阵的加法运算

In [7]: import cv2

In [8]: cv2.add(m1, m2, dtype=cv2.CV_32F)
Out[8]:
array([[ 5.,  7.,  9.],
       [11., 13., 15.]], dtype=float32)

减法运算

矩阵的减法和矩阵加法类似

In [9]: s2 = m2 - m1

In [10]: s2
Out[10]:
array([[3, 3, 3],
       [3, 3, 3]], dtype=uint8)

再来看看下面的示例,

In [11]: s3 = m1 - m2

In [12]: s3
Out[12]:
array([[253, 253, 253],
       [253, 253, 253]], dtype=uint8)

来看uint8的情况,第一行第一列的结果,1 - 4 = -3,然后针对255取模,-3 % 255 + 1 = 253

矩阵点乘

矩阵的点乘即2个矩阵对应位置的数值相乘。矩阵点乘可以使用*运算符或者np.multiply

In [14]: s4 = m1 * m2

In [15]: s4
Out[15]:
array([[ 4, 10, 18],
       [28, 40, 54]], dtype=uint8)

In [16]: np.multiply(m1, m2)
Out[16]:
array([[ 4, 10, 18],
       [28, 40, 54]], dtype=uint8)

矩阵点除

矩阵点除和点乘运算类似,对应位置的数值相除

In [17]: s5 = m2 / m1

In [18]: s5
Out[18]:
array([[4.  , 2.5 , 2.  ],
       [1.75, 1.6 , 1.5 ]])

矩阵乘法

可以使用numpy.dot方法实现矩阵的乘法,要求第一个矩阵的列和第二个矩阵的行一致

In [20]: m3 = np.array([[1, 2], [3, 4], [5, 6]], np.uint8)

In [21]: np.dot(m1, m3)
Out[21]:
array([[22, 28],
       [49, 64]], dtype=uint8)
喜欢 (0)
发表我的评论
取消评论

表情