博客
关于我
矩阵及其算法
阅读量:461 次
发布时间:2019-03-06

本文共 2458 字,大约阅读时间需要 8 分钟。

 

  

1. 矩阵介绍

矩阵(matrix)是数字或字符的矩形网格(如 excel 表格),并具有加、减、乘等运算规则。

从数学的角度来看,对于 m x n 矩阵的形式,可以用计算机中的二维数组来表示。基本上,许多矩阵的运算与应用都可以使用计算机中的二维数组解决。

矩阵维度

我们用 (行数 x 列数) 来描述矩阵的维度。

 

2. 矩阵相加

矩阵的相加运算较为简单,前提是相加的两个矩阵对应的行数与列数必须相等,而相加后矩阵的行数与列数也是相同的。

 

示例代码

1 A = [[1,2,3], [1,2,3], [1,2,3]] 2 B = [[1,2,3], [1,2,3], [1,2,3]] 3 N = 3 4 # 用于存放相加结果的矩阵 5 C = [[None]*N for i in range(N)] 6  7 for i in range(N): 8     for j in range(N): 9         C[i][j] = A[i][j] + B[i][j]  # 矩阵C = 矩阵A + 矩阵B10 print("矩阵A和矩阵B的相加结果:")11 for i in range(N):12     for j in range(N):13         print(C[i][j], end="\t")14     print()

执行结果:

矩阵A和矩阵B的相加结果:2       4       62       4       62       4       6

 

3. 矩阵相乘

并不是所有的矩阵都能进行乘法运算的。 并且,对输出矩阵的维度也存在要求。

矩阵一的列数必须等于矩阵二的行数,如 M×N 矩阵和 N×K 矩阵相乘的结果是 M×K 矩阵(新矩阵取矩阵一的行和矩阵二的列)。

实现原理

矩阵乘法依赖于点积与行列元素的各种组合。 以下图为例,矩阵 C 中的每个元素都是矩阵 A 矩阵 B 的的点积。

操作 a1·b1 表示我们取矩阵 A 中第 1 行 (1,7) 和矩阵 B 中第 1 列 (3,5) 的点积:

即:

为什么矩阵乘法以这种方式工作?

矩阵的乘法运算非常有用,但背后并没有太深奥的数学规律。 之所以数学家发明了这种运算,完全是因为它简化了以前乏味的计算。 这是一个人为的产物,但却非常有效。

示例代码

1 # 矩阵相乘函数 2 def matrix_multiply(matrix1, matrix2): 3         # 初始化所需的维度 4     m = len(matrix1)  # matrix1的行数 5     n = len(matrix1[0])  # matrix1的列数 即 matrix2的行数 6     p = len(matrix2[0])  # matrix2的列数 7  8     # 初始化结果矩阵 = matrix1的行数 x matrix2的列数 9     result_matrix = [[None]*p for i in range(m)]10 11     for row_no in range(m):12         for col_no in range(p):13             tmp = 014             for k in range(n):15                 tmp = tmp + matrix1[row_no][k] * matrix2[k][col_no]16             result_matrix[row_no][col_no] = tmp17     return result_matrix18 19 20 A = [[1,2,3], [4,5,6], [7,8,9]]21 B = [[1,2], [3,4], [5,6]]22 23 result_matrix = matrix_multiply(A, B)24 25 print("矩阵相乘结果:")26 for i in range(len(result_matrix)):27     for j in range(len(result_matrix[0])):28         print(result_matrix[i][j], end="\t")29     print()

执行结果:

矩阵相乘结果:22      2849      6476      100

 

4. 矩阵转置

转置矩阵(AT)就是把原矩阵的行坐标元素与列坐标元素相互调换。假设 AT 为 A 的转置矩阵,则有 AT[j, i] = A[i, j]。

转置矩阵有两个步骤:

  1. 矩阵旋转 90°
  2. 反转每行元素的顺序(例如 [a b c] 变为 [c b a])

例如,将矩阵 M 转置为 T:

示例代码

1 # 转置矩阵函数 2 def matrix_t(matrix): 3     result_matrix = [[None]*len(matrix) for i in range(len(matrix[0]))] 4     for i in range(len(matrix)): 5         for j in range(len(matrix[0])): 6             result_matrix[j][i] = matrix[i][j] 7     return result_matrix 8  9 10 A = [[1,2], [3,4], [5,6]]11 12 result_matrix = matrix_t(A)13 print("矩阵转置结果:")14 for i in result_matrix:15     for j in i:16         print(j, end="\t")17     print()

 

转载地址:http://kbbyz.baihongyu.com/

你可能感兴趣的文章
Mac book pro打开docker出现The data couldn’t be read because it is missing
查看>>
MAC M1大数据0-1成神篇-25 hadoop高可用搭建
查看>>
mac mysql 进程_Mac平台下启动MySQL到完全终止MySQL----终端八步走
查看>>
Mac OS 12.0.1 如何安装柯美287打印机驱动,刷卡打印
查看>>
MangoDB4.0版本的安装与配置
查看>>
Manjaro 24.1 “Xahea” 发布!具有 KDE Plasma 6.1.5、GNOME 46 和最新的内核增强功能
查看>>
mapping文件目录生成修改
查看>>
MapReduce程序依赖的jar包
查看>>
mariadb multi-source replication(mariadb多主复制)
查看>>
MariaDB的简单使用
查看>>
MaterialForm对tab页进行隐藏
查看>>
Member var and Static var.
查看>>
memcached高速缓存学习笔记001---memcached介绍和安装以及基本使用
查看>>
memcached高速缓存学习笔记003---利用JAVA程序操作memcached crud操作
查看>>
Memcached:Node.js 高性能缓存解决方案
查看>>
memcache、redis原理对比
查看>>
memset初始化高维数组为-1/0
查看>>
Metasploit CGI网关接口渗透测试实战
查看>>
Metasploit Web服务器渗透测试实战
查看>>
MFC模态对话框和非模态对话框
查看>>