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

线性代数Python计算:生成初等矩阵

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

线性代数Python计算:生成初等矩阵

numpy的array对象表示的2维数组行标和列标与数学中矩阵的一致,第一个下标为行标,第二个下标为列标。矩阵元素 a i j a_{ij} aij​在array对象A中的访问形式为A[i,j]。需要注意的是,数学中矩阵元素的下标——无论是行标还是列标都是从1开始编排的,而numpy的array表示的数组,下标是从0开始编排的。
例1 在Python中生成第一种初等矩阵(即交换单位阵的两行或两列) E 1 ( i , j ) boldsymbol{E}_1(i,j) E1​(i,j),第二种初等矩阵(即用数k乘单位阵的一行或一列) E 2 ( i ( k ) ) boldsymbol{E}_2(i(k)) E2​(i(k))和第三种初等矩阵(即用数 k k k乘单位阵的一行加到另一行上或用数k乘一列加到另一列) E 3 ( i ( k ) , j ) boldsymbol{E}_3(i(k),j) E3​(i(k),j)。

import numpy as np                      #导入numpy
def P1(A, i, j, row=True):              #第一种初等变换
    if row:
        A[[i,j]]=A[[j,i]]               #交换两行
    else:
        A[:,[i,j]]=A[:,[j,i]]           #交换两列
def P2(A,i,k, row=True):				#第二种初等变换
    if row:
        A[i]=k*A[i]						#k乘第i行
    else:
        A[:,i]=k*A[:,i]					#k乘第i列
def P3(A,i,j,k,row=True):               #第三种初等变换
    if row:
        A[j]+=k*A[i]                    #k乘以第i行加到第j行
    else:
        A[:,j]+=k*A[:,i]                #k乘以第i列加到第j列

程序中第2~6行定义了交换矩阵A(作为第一个参数)中两行或两列的函数P1,该函数的另两个参数i和j表示需交换的两行(列)的行(列)标,第4个命名参数row,表示进行的是行变换还是列变换,缺省值为True即作行的变换若传递False则意味着作列变换。第3~6行的if-else语句根据参数row传递的值,分别完成交换A的两行或两列的操作。对numpy的数组a,为交换其中两个元素a[i]和a[j],只需作赋值操作:a[[i,j]]=a[[j,i]]。2-维数组A是数组的数组,A的第i行和第j行相当于行标的[i,j]而列标缺省表示所有列,于是交换A的第i行和第j行可用赋值运算
A[[i,j]]=A[[j,i]] text{A[[i,j]]=A[[j,i]]} A[[i,j]]=A[[j,i]]
(第4行)完成。相仿地,交换两列的操作为
A[:,[i,j]]=A[:,[j,i]] text{A[:,[i,j]]=A[:,[j,i]]} A[:,[i,j]]=A[:,[j,i]]
(第6行)完成。注意,此处行标作为第一下标不能缺省,用通配符“:”表示所有行。
第7~11行定义了用数k乘矩阵的第i行或第i列的函数P2,其参数A,i及row的意义与P1的相同,参数k表示乘数。第8~11行的if-else语句根据参数row的值完成用k乘以第i行的操作(第9行)
A[i]=k*A[i] text{A[i]=k*A[i]} A[i]=k*A[i]
或完成用k乘以第i列的操作(第11行)
A[:,i]=k*A[:,i] . text{A[:,i]=k*A[:,i]}. A[:,i]=k*A[:,i].
第12~18行定义了用数k乘A中第i行加到第j行(k乘第j列加到第i列)的函数P3,参数A,i,j及row的意义与P1的相同,参数k表示参与乘法的数 k k k。第13~18行的if-else语句根据row的值完成k乘以第i行加到第j行的操作(第14行)
A[j]+=k*A[i] text{A[j]+=k*A[i]} A[j]+=k*A[i]
或完成k乘以第i列加到第j列上的操作(第18行)
A[:,j]+=k*A[:,i]. text{A[:,j]+=k*A[:,i].} A[:,j]+=k*A[:,i].
可以用下列代码测试函数P1,P2,P3。

import numpy as np                      #导入numpy
E1=np.eye(5)							#5阶单位阵
P1(E1,1,3)								#交换第2、4行
print(E1)
E2=np.eye(5)							#5阶单位阵
P2(E2,2,1.5)							#用1.5乘以第3行
print(E2)
E3=np.eye(5)							#5阶单位阵
P3(E3,1,3,1.5)							#用1.5乘以第2行加到第4行
print(E3)

根据代码内注释信息不难理解程序。运行程序,输出

[[1. 0. 0. 0. 0.]
 [0. 0. 0. 1. 0.]
 [0. 0. 1. 0. 0.]
 [0. 1. 0. 0. 0.]
 [0. 0. 0. 0. 1.]]
[[1.  0.  0.  0.  0. ]
 [0.  1.  0.  0.  0. ]
 [0.  0.  1.5 0.  0. ]
 [0.  0.  0.  1.  0. ]
 [0.  0.  0.  0.  1. ]]
[[1.  0.  0.  0.  0. ]
 [0.  1.  0.  0.  0. ]
 [0.  0.  1.  0.  0. ]
 [0.  1.5 0.  1.  0. ]
 [0.  0.  0.  0.  1. ]]

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

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

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

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