少儿Python每日一题(19):矩阵的加法和乘法

矩阵是线性代数中一种非常重要的概念,在竞赛题中经常会出现矩阵的加法和乘法相关的操作。本次的内容不再具体举原题的例子,我们了解一下矩阵的加法和乘法的计算方式,并使用Python语言编写矩阵相加和相乘的程序。Python的Numpy库提供了矩阵计算的相关方法,这里不做讲解,本次的内容仅讲解使用手工的方法编写程序计算矩阵加法和乘法的思路。

一、矩阵的加法

输入两个 n 行 m 列的矩阵 A 和 B,它们的和写作 A+B,矩阵加法的规则是两个矩阵中对应位置的值进行加和。

\begin{bmatrix} a_{11} & a_{12} & a_{13}\\ a_{21} & a_{22} & a_{23}\\ a_{31} & a_{32} & a_{33} \end{bmatrix} + \begin{bmatrix} b_{11} & b_{12} & b_{13}\\ b_{21} & b_{22} & b_{23}\\ b_{31} & b_{32} & b_{33} \end{bmatrix} = \begin{bmatrix} a_{11} + b_{11}& a_{12} + b_{12}& a_{13}+ b_{13}\\ a_{21} + b_{21}& a_{22} + b_{22}& a_{23}+ b_{23}\\ a_{31} + b_{31}& a_{32} + b_{32}& a_{33}+ b_{33} \end{bmatrix}

矩阵的加法相对来说比较简单,从上面的公式中我们可以看出,我们需要定义两个二维数据,通过循环将对应位置的值相加即可。

假设我们输入两个三行三列的矩阵,并计算出它们的结果,由于是二维数据,我们在运算的过程中需要使用到循环的嵌套。程序可以这样写:

a = []
b = []
c = []
for i in range(3):
    a.append(list(map(int, input().split())))
for i in range(3):
    b.append(list(map(int, input().split())))
for i in range(3):
    t = []
    for j in range(3):
        t.append(a[i][j] + b[i][j])
    c.append(t)
for i in c:
    for j in i:
        print(j, end=' ')
    print()

看完了3行3列的矩阵的加法的计算方法如果是m行n列的矩阵,我们也可以使用同样的方式进行计算,我们看一下m行n列的矩阵的代码如何书写:

m = int(input()) # 矩阵行数
n = int(input()) # 矩阵列数
a = []
b = []
c = []
for i in range(m):
    a.append(list(map(int, input().split())))
for i in range(m):
    b.append(list(map(int, input().split())))
for i in range(m):
    t = []
    for j in range(n):
        t.append(a[i][j] + b[i][j])
    c.append(t)
for i in c:
    for j in i:
        print(j, end=' ')
    print()

二、矩阵的乘法

矩阵的乘法的定义相对于矩阵的加法要难一点:

n×m 阶的矩阵 A 乘以 m×k 阶的矩阵 B 得到的矩阵 C 是 n×k 阶的,且 C[i][j]=A[i][0] × B[0][j]+A[i][1] × B[1][j]++ …… +A[i][m-1] × B[m-1][j](C[i][j] 表示 C 矩阵中第 i 行第 j 列元素)。

\begin{bmatrix} a_{11} & a_{12}\\ a_{21} & a_{22}\\ a_{31} & a_{32} \end{bmatrix} \times \begin{bmatrix} b_{11} & b_{12} & b_{13}\\ b_{21} & b_{22} & b_{23} \end{bmatrix} = \begin{bmatrix} a_{11}\times b_{11} + a_{12}\times b_{21}& a_{11}\times b_{12} + a_{12}\times b_{22} & a_{11}\times b_{13} + a_{12}\times b_{23} \\ a_{21}\times b_{11} + a_{22}\times b_{21} & a_{12}\times b_{12} + a_{22}\times b_{22} & a_{21}\times b_{13} + a_{22}\times b_{23}\\ a_{31}\times b_{11} + a_{32}\times b_{21} & a_{32}\times b_{12} + a_{32}\times b_{22} & a_{31}\times b_{13} + a_{32}\times b_{23} \end{bmatrix}

我们就以2×3阶矩阵乘以3×2阶矩阵为例,讲一下矩阵的乘法的Python代码如何编写。

从上面的公式我们可以得知,A矩阵的一行需要与B矩阵的一列逐个相乘,并相加。

我们可以先定义一个3×3阶的矩阵,让它所有的元素的初始值都为0。这时候我们需要先写一个二层循环,分别对应乘积中的各个元素。每个元素需要再套一层循环,计算两个矩阵中的第k行和第k列中每个元素的乘积,并进行累加。

a = []
b = []
c = []
for i in range(3):
    a.append(list(map(int, input().split())))
for i in range(2):
    b.append(list(map(int, input().split())))
for i in range(3):
    c.append([0] * 3) # 存放乘法结果的矩阵中所有初始值为0

for i in range(3):
    for j in range(3):
        for k in range(2):
            c[i][j] += a[i][k] * b[k][j]

for i in c:
    for j in i:
        print(j, end=' ')
    print()

刚刚以2×3阶矩阵乘以3×2阶矩阵为例,如果是n×m阶矩阵乘以m乘k阶矩阵,方法也是一样的。大家不妨自己试着写一写。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凤城老人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值