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

在这里插入图片描述
可以通过下标序列来访问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 = ( 1 0 0 0 0 1 0 0 − 1 2 1 0 1 1 0 1 ) \boldsymbol{A}=\begin{pmatrix}1&0&0&0\\0&1&0&0\\-1&2&1&0\\1&1&0&1\end{pmatrix} A= 1011012100100001 分成 4 4 4 2 × 2 2\times2 2×2小块:
A = ( I O A 1 I ) , \boldsymbol{A}=\begin{pmatrix}\boldsymbol{I}&\boldsymbol{O}\\\boldsymbol{A}_1&\boldsymbol{I}\end{pmatrix}, A=(IA1OI),
然后将它们粘合成
B = ( A 1 I I O ) = ( − 1 2 1 0 1 1 0 1 1 0 0 0 0 1 0 0 ) . \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学,读正版书好

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值