大家好,欢迎来到IT知识分享网。
矩阵基本运算
1、单位矩阵
单位矩阵是一个特殊的方阵,其主对角线上的元素全为1,而其他元素全为0。单位矩阵通常用符号 I 或 E 表示。
单位矩阵在矩阵运算中类似于数字1 在乘法中的作用,即任何矩阵与单位矩阵相乘,都等于原矩阵。
I n = [ 1 0 0 . . . 0 0 1 0 . . . 0 0 0 1 . . . 0 . . . . . . . . . . . . 0 0 0 0 . . . 1 ] I_{n} = \left[ \begin{matrix} {1} & {0} & {0} & … & {0}\\ {0} & {1} & {0} & … & {0}\\ {0} & {0} & {1} & … & {0}\\ … & … &… & … & 0 \\ {0} & {0} & {0} & … & {1} \end{matrix} \right] In=
100…0010…0001…0……………00001
方阵:当矩阵的行数和列数目相等时,可以称之为方阵。方阵是一种特殊的矩阵。
2、矩阵的加法和减法
两个同型(行数和列数相同)的矩阵可以进行加法和减法运算,其结果是一个同型矩阵,它的每个元素的值等于前面两个矩阵对应位置的元素的和或者差。
加法公式
[ a 11 a 12 . . . a 1 n a 21 a 22 . . . a 2 n . . . a m 1 a b m 2 . . . a m n ] + [ b 11 b 12 . . . b 1 n b 21 b 22 . . . b 2 n . . . b m 1 b m 2 . . . b m n ] = [ a 11 + b 11 a 12 + b 12 . . . a 1 n + b 1 n a 21 + b 21 a 22 + b 22 . . . a 2 n + b 2 n . . . a m 1 + b m 1 a m 2 + b m 2 . . . a m n + b m n ] \left[ \begin{matrix} a_{11} & a_{12} & … & a_{1n}\\ a_{21} & a_{22} & … & a_{2n}\\ …\\ a_{m1} &ab_{m2} & … & a_{mn} \end{matrix} \right] + \left[ \begin{matrix} b_{11} & b_{12} & … & b_{1n}\\ b_{21} & b_{22} & … & b_{2n}\\ …\\ b_{m1} & b_{m2} & … & b_{mn} \end{matrix} \right] = \left[ \begin{matrix} a_{11}+b_{11} & a_{12}+b_{12} & … & a_{1n}+b_{1n}\\ a_{21}+ b_{21} & a_{22}+b_{22} & … & a_{2n}+b_{2n}\\ …\\ a_{m1}+b_{m1} & a_{m2}+b_{m2} & … & a_{mn}+b_{mn} \end{matrix} \right]
a11a21…am1a12a22abm2………a1na2namn
+
b11b21…bm1b12b22bm2………b1nb2nbmn
=
a11+b11a21+b21…am1+bm1a12+b12a22+b22am2+bm2………a1n+b1na2n+b2namn+bmn
减法公式
[ a 11 a 12 . . . a 1 n a 21 a 22 . . . a 2 n . . . a m 1 a m 2 . . . a m n ] − [ b 11 b 12 . . . b 1 n b 21 b 22 . . . b 2 n . . . b m 1 b m 2 . . . b m n ] = [ a 11 − b 11 a 12 − b 12 . . . a 1 n − b 1 n a 21 − b 21 a 22 − b 22 . . . a 2 n − b 2 n . . . a m 1 − b m 1 a m 2 − b m 2 . . . a m n − b m n ] \left[ \begin{matrix} a_{11} & a_{12} & … & a_{1n}\\ a_{21} & a_{22} & … & a_{2n}\\ …\\ a_{m1} &a_{m2} & … & a_{mn} \end{matrix} \right] – \left[ \begin{matrix} b_{11} & b_{12} & … & b_{1n}\\ b_{21} & b_{22} & … & b_{2n}\\ …\\ b_{m1} & b_{m2} & … & b_{mn} \end{matrix} \right] = \left[ \begin{matrix} a_{11}-b_{11} & a_{12}-b_{12} & … & a_{1n}-b_{1n}\\ a_{21}- b_{21} & a_{22}-b_{22} & … & a_{2n}-b_{2n}\\ …\\ a_{m1}-b_{m1} & a_{m2}-b_{m2} & … & a_{mn}-b_{mn} \end{matrix} \right]
a11a21…am1a12a22am2………a1na2namn
−
b11b21…bm1b12b22bm2………b1nb2nbmn
=
a11−b11a21−b21…am1−bm1a12−b12a22−b22am2−bm2………a1n−b1na2n−b2namn−bmn
在numpy中的计算如下:
a = np.array([[1, 2], [3, 4]]) print(a) 输出如下 [[1 2] [3 4]] b = np.eye(2, 2, dtype=np.int16) print(b) 输出如下 [[1 0] [0 1]] print(a + b) [[2 2] [3 5]] print(a-b) [[0 2] [3 3]]
3、矩阵的数乘
与向量类似,一个数(标量)也可以跟一个矩阵相乘,其结果是一个矩阵,其中各个元素的值等于该数乘以原来矩阵中对应位置的值。
k ∗ [ a 11 a 12 . . . a 1 n a 21 a 22 . . . a 2 n . . . a m 1 a m 2 . . . a m n ] = [ k ∗ a 11 k ∗ a 12 . . . k ∗ a 1 n k ∗ a 21 k ∗ a 22 . . . k ∗ a 2 n . . . k ∗ a m 1 k ∗ a m 2 . . . k ∗ a m n ] k * \left[ \begin{matrix} a_{11} & a_{12} & … & a_{1n}\\ a_{21} & a_{22} & … & a_{2n}\\ …\\ a_{m1} &a_{m2} & … & a_{mn} \end{matrix} \right] = \left[ \begin{matrix} k*a_{11} & k*a_{12} & … & k* a_{1n}\\ k*a_{21} & k*a_{22} & … & k* a_{2n}\\ …\\ k* a_{m1} & k*a_{m2} & … & k*a_{mn} \end{matrix} \right] k∗
a11a21…am1a12a22am2………a1na2namn
=
k∗a11k∗a21…k∗am1k∗a12k∗a22k∗am2………k∗a1nk∗a2nk∗amn
在numpy中的计算如下:
a = np.array([[1, 2], [3, 4]]) print(a) 输出如下 [[1 2] [3 4]] b = np.eye(2, 2, dtype=np.int16) print(b) 输出如下 [[1 0] [0 1]] print(10 * a) [[10 20] [30 40]]
4、矩阵的点乘
矩阵的点乘也称之为矩阵的相乘。
两个矩阵,当第一个矩阵的列数与第二个矩阵的行数相等时,可以用第一个矩阵点乘第二个矩阵,其结果是一个新的矩阵,它的行数是第一个矩阵的行数,列数是第二个矩阵的列数。它的位与第 i 行第 j 列的元素,等于第一个矩阵的第 i 行(它是一个向量)与第二个矩阵的第 j 列(它也是一个向量)这两个向量的内积。
向量内积(点乘/点积/数量积):两个向量对应元素相乘之后求和。
a = [ a 1 , a 2 , . . . , a n ] b = [ b 1 , b 2 , . . . , b n ] a ∗ b = a 1 ∗ b 1 + a 2 ∗ b 2 + . . . + a n ∗ b n a = [a_{1},a_{2},…,a_{n}] \\ b = [b_{1},b_{2},…,b_{n}] \\ \\ a * b = a_{1}*b_{1} + a_{2}*b_{2} + … + a_{n}*b_{n} a=[a1,a2,…,an]b=[b1,b2,…,bn]a∗b=a1∗b1+a2∗b2+…+an∗bn
矩阵可以看成是多维的向量,即单个向量的叠加。
矩阵点乘的意义:
矩阵点乘的意义有很多,此处仅简述矩阵在人工智能领域的意义。矩阵点乘最大的意义在于计算两个矩阵的相似度。
余弦相似度 c o s θ = A 、 B 矩阵相乘 A 向量长度 ∗ B 向量长度 余弦相似度 cos\theta = \frac{A、B矩阵相乘}{A向量长度*B向量长度} 余弦相似度cosθ=A向量长度∗B向量长度A、B矩阵相乘
c o s θ cos\theta cosθ 越大,说明A、B两个矩阵越相似
A、B矩阵相乘 = A向量长度 x B向量长度 x c o s θ cos\theta cosθ = A向量长度 x B向量在A向量上的投影长度
[ a 11 a 12 . . . a 1 n a 21 a 22 . . . a 2 n . . . a m 1 a m 2 . . . a m n ] ∗ [ b 11 b 12 . . . b 1 n b 21 b 22 . . . b 2 n . . . b m 1 b m 2 . . . b m n ] = [ c 11 c 12 . . . c 1 n c 21 c 22 . . . c 2 n . . . c m 1 c m 2 . . . c m n ] \left[ \begin{matrix} a_{11} & a_{12} & … & a_{1n}\\ a_{21} & a_{22} & … & a_{2n}\\ …\\ a_{m1} & a_{m2} & … & a_{mn} \end{matrix} \right] * \left[ \begin{matrix} b_{11} & b_{12} & … & b_{1n}\\ b_{21} & b_{22} & … & b_{2n}\\ …\\ b_{m1} & b_{m2} & … & b_{mn} \end{matrix} \right] = \left[ \begin{matrix} c_{11} & c_{12} & … & c_{1n}\\ c_{21} & c_{22} & … & c_{2n}\\ …\\ c_{m1} & c_{m2} & … & c_{mn} \end{matrix} \right]
a11a21…am1a12a22am2………a1na2namn
∗
b11b21…bm1b12b22bm2………b1nb2nbmn
=
c11c21…cm1c12c22cm2………c1nc2ncmn
c 11 = a 11 ∗ b 11 + a 12 ∗ b 21 + . . + a 1 n ∗ b m 1 c 12 = a 11 ∗ b 12 + a 12 ∗ b 22 + . . + a 1 n ∗ b m 2 . . . c 1 n = a 11 ∗ b 1 n + a 12 ∗ b 2 n + . . + a 1 n ∗ b m n 其他以此类推 c_{11} = a_{11}*b_{11} +a_{12}*b_{21} + .. +a_{1n}*b_{m1} \\ c_{12} = a_{11}*b_{12} +a_{12}*b_{22} + .. +a_{1n}*b_{m2} \\ …\\ c_{1n} = a_{11}*b_{1n} +a_{12}*b_{2n} + .. +a_{1n}*b_{mn} \\ \\ 其他以此类推 c11=a11∗b11+a12∗b21+..+a1n∗bm1c12=a11∗b12+a12∗b22+..+a1n∗bm2…c1n=a11∗b1n+a12∗b2n+..+a1n∗bmn其他以此类推
举例如下:
[ 1 2 3 4 ] ∗ [ 5 6 7 8 ] = [ 19 22 43 50 ] \left[ \begin{matrix} 1 & 2\\ 3 & 4\\ \end{matrix} \right] * \left[ \begin{matrix} 5 & 6\\ 7 & 8\\ \end{matrix} \right] = \left[ \begin{matrix} 19 & 22\\ 43 & 50\\ \end{matrix} \right] [1324]∗[5768]=[19432250]
19 = 1*5 + 2*7 22 = 1*6 + 2*8 43 = 3*5 + 4*7 50 = 3*6 + 4*8
在numpy中的计算如下:
# a · b = a[0] * b[0] + a[1] * b[1] + ... + a[n] * b[n] # 一维矩阵相乘 a = [1, 2, 3] b = [1, 0, 2] print(np.dot(a, b)) # 7 # 二维矩阵相乘 a = [[1, 0], [0, 1]] b = [[4, 1], [2, 2]] print(np.dot(a, b)) # [[4 1] # [2 2]]
5、矩阵的转置
矩阵的转置是一个矩阵,它的第 i 行 第 j 列的值等于原矩阵的第 j 行第 i 列的值。矩阵A的转置用 A T A^T AT表示。
[ a 11 a 12 . . . a 1 n a 21 a 22 . . . a 2 n . . . a m 1 a b m 2 . . . a m n ] T = [ a 11 a 21 . . . a m 1 a 12 a 22 . . . a m 2 . . . a 1 n a b 2 n . . . a m n ] \left[ \begin{matrix} a_{11} & a_{12} & … & a_{1n}\\ a_{21} & a_{22} & … & a_{2n}\\ …\\ a_{m1} &ab_{m2} & … & a_{mn} \end{matrix} \right] ^T = \left[ \begin{matrix} a_{11} & a_{21} & … & a_{m1}\\ a_{12} & a_{22} & … & a_{m2}\\ …\\ a_{1n} &ab_{2n} & … & a_{mn} \end{matrix} \right]
a11a21…am1a12a22abm2………a1na2namn
T=
a11a12…a1na21a22ab2n………am1am2amn
在numpy中的计算如下:
数组转置是一个常见的线性代数操作,它指的是将数组的行变为列,列变为行。在编程中,特别是在处理矩阵或二维数组时,这个操作非常有用
ndarray.T
arr = np.array([[1, 3, 5], [2, 4, 6]]) print(arr) # [[1 3 5] # [2 4 6]] print(arr.T) # [[1 2] # [3 4] # [5 6]]
6、矩阵的逆
矩阵的逆类似于数的倒数,矩阵A的逆用 A − 1 A^{-1} A−1表示。
如果一个n阶方阵A,存在另一个n阶方阵B,使得 A * B = B * A = E,则称方针B为矩阵A的逆,或者称矩阵B为矩阵A的逆矩阵。如果矩阵A的逆矩阵存在,则称矩阵A是可逆矩阵。
矩阵A的逆矩阵的转置等于矩阵A的转置的逆,即 ( A − 1 ) T (A^{-1})^T (A−1)T = ( A T ) − 1 (A^T)^{-1} (AT)−1
矩阵的逆的意义:
解决“矩阵除法”问题:由于矩阵本身没有除法的概念,但有时需要在矩阵运算中进行类似除法的操作。矩阵的逆就是用来解决这种“矩阵除法”问题的。例如,如果我们要计算 (X \times A = B),并且 (A) 是可逆的,那么可以通过左乘 A − 1 A^{-1} A−1 来得到 (X = B \times A − 1 A^{-1} A−1)。
在numpy中的计算如下:
# 定义一个矩阵 matrix = np.array([[1, 2], [3, 4]]) print(matrix) # [[1 2] # [3 4]] # 求矩阵的逆 inverse_matrix = np.linalg.inv(matrix) print(inverse_matrix) # [[-2. 1. ] # [ 1.5 -0.5]]
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/118975.html
