理论教育 Python矩阵算术运算示例

Python矩阵算术运算示例

时间:2023-11-22 理论教育 版权反馈
【摘要】:矩阵的算术运算,包括矩阵加、减、乘、转置、求逆等。例如:4.矩阵相乘np.dot矩阵相乘,符合线性代数的运算规则,在numpy中,又被称为点乘,函数名为dot。numpy支持矩阵与向量的加、减、乘、除运算,其运算规则按矩阵的列开展,即向量的每个元素与矩阵的对应列进行相应的运算。

Python矩阵算术运算示例

矩阵的算术运算,包括矩阵加、减、乘、转置、求逆等。

numpy类库提供了很多矩阵运算的方法,分别解释如下:

1.矩阵元素的索引

对矩阵元素的索引,可以从不同的角度出发加以引用,如矩阵的一行或一列,也可以是某个指定位置的元素。对二维矩阵x来说,如果只用一个下标引用,则指给定的行,例如:

>>>x=np.array([[1,2],[5,6]])

>>>x[0]

视频讲解:python矩阵计算—遍历

array([1,2])

指定具体元素,可在给定行后,再增加一个[]中跟随列索引完成,如:

>>>x[0][1]

2

这种写法和C语言是保持一致的。如果感觉以矩阵理论中矩阵元素的表达更容易理解,则可以写成[i,j]的形式,如:

>>>x[0,1]

2

2.矩阵的行和列数

numpy矩阵是一个对象,要获取一个矩阵的维数,使用其shape属性即可,如:

size=A.shape

size[0]是行数,size[1]是列数。

3.矩阵的加减运算

视频讲解:矩阵计算—算术

矩阵的“+”“-”运算对两个相同尺寸的矩阵进行,运算时直接用“+”“-”运算符进行。

例如:

4.矩阵相乘np.dot

矩阵相乘,符合线性代数的运算规则,在numpy中,又被称为点乘,函数名为dot。

设有矩阵A,B,将其相乘得到矩阵C,使用的语句为:C=np.dot(A,B)。例如:

也可以直接使用矩阵的dot方法,如:

numpy也支持2个矩阵进行“*”运算,但“*”运算与线性代数中的矩阵乘法有很大差异,例如:

我们看到,相乘的结果是,X的每个元素与Y的对应的列相乘。按线性代数理论,上面的运算结果显然不是我们需要的。但由于“*”运算无语法错误,很容易引起误解,所以请牢记:矩阵间相乘不能用“*”号,只能使用dot方法。

5.矩阵转置

矩阵转置,将原矩阵的行变列,列变行。其语句为:

B=np.transpose(A)

或(www.daowen.com)

B=A.T

例如:

6.方阵求逆

矩阵求逆,要求原矩阵是满秩的方阵。设A是满秩方阵,则A的逆矩阵可以用如下的语句求得:

B=np.linalg.inv(A)

例如:

此时,矩阵Dinv是D的逆,将两个矩阵相乘,应该得到一个单位矩阵,将D和Dinv相乘的结果如下:

可见,在误差范围内(10-15可以认为是0),结果矩阵是一个单位矩阵。

7.矩阵与标量运算

矩阵与标量的加、减、乘、除运算,对矩阵的每个元素进行,如:

上述代码先生成一个3×3的单位矩阵,将其与1相加,结果是矩阵的每个元素都增加了1。

视频讲解:python矩阵计算—特殊运算

8.算术运算扩展

称之为运算扩展,是因为这些运算并不符合线性代数、矩阵论等计算的规则,但在实际的科学计算中又需要这样的一些处理方式带来的便利。如一个矩阵与一个向量相除,或相减,在线性代数中并不存在这样的理论,但实际科学计算中却很有必要。设矩阵X是描述n个样本的检测数据,每个样本有m个特征。在进行科学计算时,经常存在将矩阵X按列进行处理,如将每个特征调整为0均值,1方差。其处理过程是将每列减去其均值,然后除以其标准差。这样的处理采用循环对矩阵X的每列进行,还是用一条语句实现?numpy采用了后面的方案。很显然,这种方案使程序的逻辑更加清晰,也符合人类思维的习惯。

numpy支持矩阵与向量的加、减、乘、除运算,其运算规则按矩阵的列开展,即向量的每个元素与矩阵的对应列进行相应的运算。参看下面对矩阵X按列实现数据的0均值,1方差的语句。

avg=X.mean(axis=0)

std=X.std(axis=0)

X=(X-avg)/std

前2条语句实现矩阵按列求得均值和方差。最后一条语句则实现每列减去自己的均值,然后除以对应的方差,语句相当简练。

9.矩阵的常用函数

矩阵对象本身有很多辅助运算的函数,如sum(元素和)、std(标准偏差)等。默认情况下,这些函数对矩阵所有元素进行。但由于矩阵具有行、列属性,因此,通过特别指定,这些函数也可以按行或列进行操作。而指定该操作的参数为axis,当axis=0时,按列操作,axis=1时,按行操作。例如:

视频讲解:python矩阵计算—函数

>>>x=np.array([[1,2,3],[5,6,7]])

>>>x.sum( )

24

>>>x.sum(axis=0)

array([6,8,10])

>>>x.sum(axis=1)

array([6,18])

当选择了参数axis后,函数计算的过程按列或行进行,得到的结果仍然是一个ndarray对象。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈