栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

线性代数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&1end{pmatrix} A=⎝⎜⎜⎛​10−11​0121​0010​0001​⎠⎟⎟⎞​分成 4 4 4个 2 × 2 2times2 2×2小块:
A = ( I O A 1 I ) , boldsymbol{A}=begin{pmatrix}boldsymbol{I}&boldsymbol{O}\boldsymbol{A}_1&boldsymbol{I}end{pmatrix}, A=(IA1​​OI​),
然后将它们粘合成
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&0end{pmatrix}. B=(A1​I​IO​)=⎝⎜⎜⎛​−1110​2101​1000​0100​⎠⎟⎟⎞​.

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]]

写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/968396.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号