python矩阵左除_技术图文:Matlab VS. Numpy 矩阵基本运算

背景

前段时间在知识星球上立了一个Flag,至少写10篇关于 Python,Matlab 和 C# 对比的总结。

这是第 3 篇,对比 Matlab 与 Numpy 在矩阵基本运算方面的区别与联系。199555647_2_2020081708011136

虽然 Numpy 定义了 matrix 类型,使用该 matrix 类型创建的是矩阵对象。但是由于 NumPy 中同时存在 ndarray 和 matrix 对象,因此用户很容易将两者弄混。这有违 Python 的“显式优于隐式”的原则,因此官方并不推荐在程序中使用 matrix。在这里,我们仍然用 ndarray 来介绍。

1. 矩阵的转置

矩阵的行和列对换称为矩阵的转置。

【例1】求矩阵的转置矩阵。

Matlab:

对矩阵的转置运算,只需要在矩阵的右上角加上单引号即可。>> A = [1, 2, 3; 4, 5, 6; 7, 8, 9];

>> disp(A')

1     4     7

2     5     8

3     6     9

Numpy:import numpy as np

A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

print(np.transpose(A))

# [[1 4 7]

#  [2 5 8]

#  [3 6 9]]

print(A.T)

# [[1 4 7]

#  [2 5 8]

#  [3 6 9]]

2. 矩阵的加法与减法

两个同型矩阵(行数和列数相同的矩阵)可以做加法和减法,返回一个同样行数和列数的矩阵,其中每个元素为原先两个矩阵对应元素之和,或两个矩阵对应元素之差。若行数和列数不同的两个矩阵做加法或减法,则显示错误。

【例1】已知矩阵与,求矩阵, 。

Matlab:

矩阵的书写方法是:数与数之间用逗号或空格分开,换行时用分号分开,矩阵的开始和终止用方括号。>> A=[1,2,3;4,5,6;7,8,10];

>> B=[1,3,5;7,9,11;13,15,16];

>> disp(A+B)

2     5     8

11    14    17

20    23    26

>> disp(A-B)

0    -1    -2

-3    -4    -5

-6    -7    -6

Numpy:import numpy as np

A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 10]])

B = np.array([[1, 3, 5], [7, 9, 11], [13, 15, 16]])

print(A + B)

# [[ 2  5  8]

#  [11 14 17]

#  [20 23 26]]

print(A - B)

# [[ 0 -1 -2]

#  [-3 -4 -5]

#  [-6 -7 -6]]

3. 矩阵的乘法

若矩阵,,则矩阵的乘积。

必须注意,矩阵相乘,矩阵的列数应等于矩阵的行数,否则将显示出错。

【例1】已知3阶方阵和,求和。

Matlab:>> A=[1,2,3;4,5,6;7,8,10];

>> B=[1,3,5;7,9,11;13,15,17];

>> disp(A*B)

54    66    78

117   147   177

193   243   293

>> disp(B*A)

48    57    71

120   147   185

192   237   299

Numpy:import numpy as np

A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 10]])

B = np.array([[1, 3, 5], [7, 9, 11], [13, 15, 17]])

print(np.dot(A, B))

# [[ 54  66  78]

#  [117 147 177]

#  [193 243 293]]

print(np.dot(B, A))

# [[ 48  57  71]

#  [120 147 185]

#  [192 237 299]]

4. 矩阵的左除

矩阵的左除,常用于解线性方程组,。这时,即矩阵左除矩阵。

【例1】已知矩阵和,求矩阵左除。

Matlab:

矩阵的左除为矩阵乘法的逆运算,若则,即等于左除。注意矩阵左除用反斜杠表示。>> A=[1,2,3;4,5,6;7,8,10];

>> C=[54,66,75;117,147,171;193,243,283];

>> disp(A\C)

1.0000    3.0000    5.0000

7.0000    9.0000   11.0000

13.0000   15.0000   16.0000

>> disp(inv(A)*C)

1.0000    3.0000    5.0000

7.0000    9.0000   11.0000

13.0000   15.0000   16.0000

Numpy:import numpy as np

A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 10]])

C = np.array([[54, 66, 75],

[117, 147, 171],

[193, 243, 283]])

invA = np.linalg.inv(A)

print(np.dot(invA, C))

# [[ 1.  3.  5.]

#  [ 7.  9. 11.]

#  [13. 15. 16.]]

print(np.linalg.solve(A, C))

# [[ 1.  3.  5.]

#  [ 7.  9. 11.]

#  [13. 15. 16.]]

5. 矩阵的右除

矩阵的右除,常用于解线性方程组,。这时,即矩阵右除矩阵。

【例1】已知矩阵和,求矩阵右除。

Matlab:

矩阵的右除也为矩阵乘法的逆运算,但所求解矩阵的位置不同,若,则,即矩阵等于右除,注意右除用斜杠。>> B=[1,3,5;7,9,11;13,15,16];

>> C=[54,66,75;117,147,171;193,243,283];

>> disp(C/B)

1.0000    2.0000    3.0000

4.0000    5.0000    6.0000

7.0000    8.0000   10.0000

>> disp(C*inv(B))

1.0000    2.0000    3.0000

4.0000    5.0000    6.0000

7.0000    8.0000   10.0000

Numpy:import numpy as np

B = np.array([[1, 3, 5], [7, 9, 11], [13, 15, 16]])

C = np.array([[54, 66, 75],

[117, 147, 171],

[193, 243, 283]])

invB = np.linalg.inv(B)

print(np.dot(C, invB))

# [[ 1.  2.  3.]

#  [ 4.  5.  6.]

#  [ 7.  8. 10.]]

print(np.linalg.solve(B.T, C.T).T)

# [[ 1.  2.  3.]

#  [ 4.  5.  6.]

#  [ 7.  8. 10.]]

总结

以上总结的不一定全,但先有个框架等后面在实践的过程中慢慢补充。今天就到这里吧。See You!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值