关于矩阵
填数游戏我们以前都玩过,它是一个九宫格。要求在九宫格的空格里填数,使横行、竖行、斜行上的三个数的和等于18。

为了叙说方便,在原有九宫格的基础上加上序号,横向为行,纵向为列。横向从上到下依次为1、2、3行,纵向从左到右依次为1、2、3列。

用大写黑体字母A表示九宫格,用行号和列号来表示九宫格内每个格子的数。例如:A[2,1]的数为10,也就是第2行第1列的数为10;A[1,3]的数为7,也就是第1行第3列的数为7;A[2,2]的数为6,也就是第2行第2列的数为6。
简便起见,也可以以下标方式表示每个格子的数。例如:A2,1等同于A[2,1];A1,3等同于A[1,3];A2,2等同于A[2,2]。
准备工作做好后,现在可以开始解题了。我们注意到A的第二行A[2,1]和A[2,2]的数分别为8和6,A[2,3]只能填数2。 A[2,3]的数确定后,A[3,3]的数也会确定下来,A[3,3]的数是9。

同样的解题思路,可以依次算出A[1,1]、A[3,1]、A[1,2]、A[3,2]的数。

现在把九宫格的表格线去掉,行号和列号也去掉,让它变换成下面的样子。

去除表格线的九宫格,就是矩阵的样式。矩阵是由行和列组成的一组数表,矩阵使用大写黑体字母表示,矩阵中的元素使用行下标和列下标来表示。矩阵一般用下面的形式表示。

其中,大写黑体字母A是矩阵的标识名称,标识名称下面的3 X 3表示3行3列矩阵。矩阵A共有3 X 3=9个数,这9个数称为矩阵的元素,A[1,1]表示第1行第1列的元素,A[1,2]表示第1行第2列的元素,……,依次类推,A[3,3]表示第3行第3列的元素。矩阵A也可以表示为A33。
使用NumPy构造矩阵
要在Numpy内构造矩阵,使用array()函数创建二维数组即可。
例1 使用Numpy数组构造矩阵A
>>> import numpy as np
>>> a = np.array([[3,8,7],
[10,6,2],
[5,4,9]])
例2 矩阵的加法和减法运算
#定义矩阵A和B
A = [[-1,3,2],[5,7,-2],[-3,0,1]]
B = [[8,2,-1],[6,4,0],[-2,3,5]]
#定义矩阵C,存储A+B的结果
C = [[0,0,0],[0,0,0],[0,0,0]]
#定义矩阵D,存储A-B的结果
D = [[0,0,0],[0,0,0],[0,0,0]]
# 遍历A矩阵的行
for i in range(len(A)):
# 遍历A矩阵的列
for j in range(len(A[0])):
C[i][j] = A[i][j] + B[i][j]
D[i][j] = A[i][j] - B[i][j]
#输出C矩阵
for r in C:
print(r)
#输出D矩阵
for r in D:
print(r)
例3 实现A矩阵与B矩阵的乘法运算。
import numpy as np
#定义矩阵A和B
A = np.array([[15,28,5],[12,31,6],[13,29,7]])
B = np.array([[4],[3],[2]])
#定义矩阵乘法运算函数
def matrixMul(A, B):
#NumPy的matmul完成矩阵乘法运算
C = np.matmul(A,B)
return C
if __name__ == '__main__':
C = matrixMul(A,B)
print(C)
Numpy库的matmul()函数可以实现矩阵乘法运算。
例4 实现矩阵的转置运算
矩阵的转置比较容易理解,就是把矩阵的行列互换,行变成列,列变成行。
import numpy as np
#定义矩阵A
A = np.array([[1,1],[3,7],[11,5]])
#定义矩阵转置运算函数
def matrixTranspos(A):
#创建矩阵C,矩阵C的默认元素都为0
#矩阵C的行数为A矩阵的列数,列数为A矩阵的行数
C = [[0] * len(A) for i in range(len(A[0]))]
#NumPy的transpose完成矩阵A的转置运算
C = np.transpose(A)
return C
if __name__ == '__main__':
C = matrixTranspos(A)
print(C)
Numpy库的transpose()函数可以实现矩阵转置运算。