线性代数Python计算:矩阵分块

博客介绍了numpy数组的切片操作,如A[i:j]、A[i]、A[i,j]等,并展示了如何通过hstack和vstack函数拼接矩阵。通过实例解释了如何将4x4矩阵A拆分为小块并重新组合成新的矩阵B。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
可以通过下标序列来访问numpy的数组a中的片段:a[[i,j]]表示a[i]和a[j],a[:]表示所有元素,a[i:j]表示从a[i]开始直至a[j-1]为止的元素,a[:j]表示从a[0]开始直至a[j-1]为止的元素,a[i:]表示从a[i]开始后的所有元素。
对于表示矩阵的2-维数组A,A[i,j]表示第i行第j列元素。其中,列标可缺省,意为所有列,行标不可缺省。A[i,:],或A[i]表示第i行元素,A[i:j]表示从第i行A[i]开始到第j-1行A[j-1]为止的各行,A[[i,j]]表示第i行A[i]和第j行A[j]。A[:,j]表示第j列元素,A[:,i:j]表示从第i列到第j-1列为止的各列,A[:,[i,j]]表示第i列A[:,i]和第j列A[:,j]。A[i:j,p:q]表示“块”第i行到第j-1行,第p列到第q-1列,如下图所示。
在这里插入图片描述
可以用下标序列的方法读取表示矩阵的2-维数组中的“块”,numpy还提供了两个将“小”矩阵粘结成“大”矩阵的函数hstack和vstack。前者将对干个行数相等的矩阵横向连接,其调用接口为
hstack((A,B,...))\text{hstack((A,B,...))}hstack((A,B,...))
后者对若干个列数相同的矩阵纵向连接,调用接口为
vstack((A,B,...)).\text{vstack((A,B,...)).}vstack((A,B,...)).
例1 下列代码将矩阵A=(10000100−12101101)\boldsymbol{A}=\begin{pmatrix}1&0&0&0\\0&1&0&0\\-1&2&1&0\\1&1&0&1\end{pmatrix}A=1011012100100001分成4442×22\times22×2小块:
A=(IOA1I),\boldsymbol{A}=\begin{pmatrix}\boldsymbol{I}&\boldsymbol{O}\\\boldsymbol{A}_1&\boldsymbol{I}\end{pmatrix},A=(IA1OI),
然后将它们粘合成
B=(A1IIO)=(−1210110110000100).\boldsymbol{B}=\begin{pmatrix}\boldsymbol{A}_1&\boldsymbol{I}\\\boldsymbol{I}&\boldsymbol{O}\end{pmatrix}=\begin{pmatrix}-1&2&1&0\\1&1&0&1\\1&0&0&0\\0&1&0&0\end{pmatrix}.B=(A1IIO)=1110210110000100.

import numpy as np                  #导入numpy
A=np.array([[1,0,0,0],              #设置矩阵
            [0,1,0,0],
            [-1,2,1,0],
            [1,1,0,1]])
I=A[:2,:2]                          #左上角块
O=A[:2,2:]                          #右上角块
A1=A[2:,:2]                         #左下角块
B=np.vstack((np.hstack((A1,I)),     #连接
             np.hstack((I,O))))
print(B)

利用代码内部的注释信息,不难理解该程序。运行输出

[[-1  2  1  0]
 [ 1  1  0  1]
 [ 1  0  0  0]
 [ 0  1  0  0]]

写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
代码诚可贵,原理价更高。若为AI学,读正版书好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值