技术图文:Matlab VS. Numpy 矩阵基本运算
背景
前段时间在知识星球上立了一个Flag,至少写10篇关于 Python,Matlab 和 C# 对比的总结。
这是第 3 篇,对比 Matlab 与 Numpy 在矩阵基本运算方面的区别与联系。
虽然 Numpy 定义了 matrix
类型,使用该 matrix
类型创建的是矩阵对象。但是由于 NumPy 中同时存在 ndarray
和 matrix
对象,因此用户很容易将两者弄混。这有违 Python 的“显式优于隐式”的原则,因此官方并不推荐在程序中使用 matrix
。在这里,我们仍然用 ndarray
来介绍。
1. 矩阵的转置
矩阵的行和列对换称为矩阵的转置。
【例1】求矩阵AAA的转置矩阵。
A=[1234567810]A = \begin{bmatrix} 1&2&3\\ 4&5&6\\ 7&8&10\\ \end{bmatrix} A=⎣⎡1472583610⎦⎤
Matlab:
对矩阵的转置运算,只需要在矩阵的右上角加上单引号即可。
>> A = [1, 2, 3; 4, 5, 6; 7, 8, 9];
>> disp(A')1 4 72 5 83 6 9
Numpy:
import numpy as npA = 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】已知矩阵AAA与BBB,求矩阵A−BA-BA−B,A+BA+BA+B 。
A=[1234567810],B=[1357911131516]A = \begin{bmatrix} 1&2&3\\ 4&5&6\\ 7&8&10\\ \end{bmatrix} , B = \begin{bmatrix} 1&3&5\\ 7&9&11\\ 13&15&16\\ \end{bmatrix} A=⎣⎡1472583610⎦⎤,B=⎣⎡1713391551116⎦⎤
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 811 14 1720 23 26>> disp(A-B)0 -1 -2-3 -4 -5-6 -7 -6
Numpy:
import numpy as npA = 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. 矩阵的乘法
若矩阵A=(aij)m×pA=(a_{ij})_{m\times p}A=(aij)m×p,B=(bij)p×nB=(b_{ij})_{p\times n}B=(bij)p×n,则矩阵的乘积C=AB=(cij)m×nC=AB=(c_{ij})_{m×n}C=AB=(cij)m×n。
cij=∑k=1paikbkj,i=1,…,m;j=1,…,n;k=1,…,pc_{ij}=\sum^{p}_{k=1}{a_{ik}b_{kj}}, i=1,\dots,m;j=1,\dots,n;k=1,\dots,p cij=k=1∑paikbkj,i=1,…,m;j=1,…,n;k=1,…,p
必须注意,矩阵相乘,矩阵AAA的列数应等于矩阵BBB的行数,否则将显示出错。
【例1】已知3阶方阵AAA和BBB,求A×BA\times BA×B和B×AB\times AB×A。
A=[1234567810],B=[1357911131517]A = \begin{bmatrix} 1&2&3\\ 4&5&6\\ 7&8&10\\ \end{bmatrix} , B = \begin{bmatrix} 1&3&5\\ 7&9&11\\ 13&15&17\\ \end{bmatrix} A=⎣⎡1472583610⎦⎤,B=⎣⎡1713391551117⎦⎤
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 78117 147 177193 243 293>> disp(B*A)48 57 71120 147 185192 237 299
Numpy:
import numpy as npA = 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. 矩阵的左除
矩阵的左除,常用于解线性方程组,AX=BAX=BAX=B。这时X=A−1BX=A^{-1}BX=A−1B,即矩阵AAA左除矩阵BBB。
【例1】已知矩阵AAA和CCC,求矩阵AAA左除CCC。
A=[1234567810],C=[546675117147171193243283]A = \begin{bmatrix} 1&2&3\\ 4&5&6\\ 7&8&10\\ \end{bmatrix} , C = \begin{bmatrix} 54&66&75\\ 117&147&171\\ 193&243&283\\ \end{bmatrix} A=⎣⎡1472583610⎦⎤,C=⎣⎡541171936614724375171283⎦⎤
Matlab:
矩阵的左除为矩阵乘法的逆运算,若AB=CAB=CAB=C则B=A−1C=A∖CB=A^{-1} C=A \setminus CB=A−1C=A∖C,即BBB等于AAA左除CCC。注意矩阵左除用反斜杠表示。
>> 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.00007.0000 9.0000 11.000013.0000 15.0000 16.0000>> disp(inv(A)*C)1.0000 3.0000 5.00007.0000 9.0000 11.000013.0000 15.0000 16.0000
Numpy:
import numpy as npA = 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. 矩阵的右除
矩阵的右除,常用于解线性方程组,XB=CXB=CXB=C。这时X=CB−1X=CB^{-1}X=CB−1,即矩阵CCC右除矩阵BBB。
【例1】已知矩阵BBB和CCC,求矩阵CCC右除BBB。
B=[1357911131516],C=[546675117147171193243283]B = \begin{bmatrix} 1&3&5\\ 7&9&11\\ 13&15&16\\ \end{bmatrix} , C = \begin{bmatrix} 54&66&75\\ 117&147&171\\ 193&243&283\\ \end{bmatrix} B=⎣⎡1713391551116⎦⎤,C=⎣⎡541171936614724375171283⎦⎤
Matlab:
矩阵的右除也为矩阵乘法的逆运算,但所求解矩阵的位置不同,若AB=CAB=CAB=C,则A=CB−1=C/BA=CB^{-1}=C/BA=CB−1=C/B,即矩阵AAA等于CCC右除BBB,注意右除用斜杠。
>> 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.00004.0000 5.0000 6.00007.0000 8.0000 10.0000>> disp(C*inv(B))1.0000 2.0000 3.00004.0000 5.0000 6.00007.0000 8.0000 10.0000
Numpy:
import numpy as npB = 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!
后台回复「搜搜搜」,随机获取电子资源!
欢迎关注,请扫描二维码:
技术图文:Matlab VS. Numpy 矩阵基本运算相关推荐
- python矩阵左除_技术图文:Matlab VS. Numpy 矩阵基本运算
背景 前段时间在知识星球上立了一个Flag,至少写10篇关于 Python,Matlab 和 C# 对比的总结. 这是第 3 篇,对比 Matlab 与 Numpy 在矩阵基本运算方面的区别与联系. ...
- matlab 和 numpy 矩阵乘法异同
最近在用python做一点东西,发现python下面的矩阵运算和matlab是不同的,虽然之前找到了一个关于MATLAB与python在数学运算方面指令的对照表,但是感觉还是不够详细. 对照表链接:h ...
- python矩阵乘法 点乘_转(matlab和numpy矩阵乘法异同)
广义的矩阵的矩阵乘法包括:矩阵相乘,矩阵点乘,向量乘法与向量点乘,内积. 对应的MATLAB有[* , .* , dot]三种运算符.分别表示的相乘,点乘和内积. 而在numpy中呢,也有*和dot两 ...
- MATLAB转置矩阵乘,【MATLAB】线性代数矩阵基本运算(转置,乘法,求逆)
文章目录 创建矩阵 向量转置 矩阵乘法 单位矩阵 矩阵求逆 创建矩阵 MATLAB 提供了许多函数,用于创建各种类型的矩阵.例如,您可以使用基于帕斯卡三角形的项创建一个对称矩阵: A = pascal ...
- 【MATLAB】线性代数矩阵基本运算(转置,乘法,求逆)
文章目录 创建矩阵 向量转置 矩阵乘法 单位矩阵 矩阵求逆 创建矩阵 MATLAB 提供了许多函数,用于创建各种类型的矩阵.例如,您可以使用基于帕斯卡三角形的项创建一个对称矩阵: A = pascal ...
- 技术图文:Matlab VS. Numpy 常见矩阵
背景 前段时间在知识星球上立了一个Flag,至少写10篇关于 Python,Matlab 和 C# 对比的总结. 这是第 4 篇,对比 Matlab 与 Numpy 中经常用到的各种矩阵,比如零矩阵. ...
- matlab 矩阵命令,matlab中的矩阵的基本运算命令
matlab中的矩阵的基本运算命令 (2013-07-19 08:45:49) 1.1 矩阵的表示 1.2 矩阵运算 1.2.14 特殊运算 1.矩阵对角线元素的抽取 函数 diag 格式 X = d ...
- MATLAB矩阵基本运算的实现(一)
MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室),强大的矩阵运算能力是MATLAB的一个重要的特点,下面我就为大家整理了一下利用MATLAB实现矩阵基本 ...
- Python 矩阵基本运算【numpy】
文章目录 一.实验说明 二.Python 矩阵基本运算 1. python矩阵操作 2. python矩阵乘法 3. python矩阵转置 4. python求方阵的迹 5. python方阵的行列式 ...
最新文章
- AI每日精选:新加坡批准AI血管超声扫描;蔚来硅谷裁员141人
- 使用MAT做jvm的GC Roots溯源
- 4j 设置日志保存天数_MySQL中的这几类日志,你一定要知道
- 【转】idea激活搭建授权服务器
- 2019-5-30-websocket下readyState常量
- html:(26):类选择器和id选择器
- gephi生成网络关系图_路网拓扑重建专题 (3) 网络图生成
- 频繁gc是什么意思_[JVM]一次线上频繁GC的问题解决
- CodeVs 1017 乘积最大(DP)
- vue项目H5 跳转微信小程序
- Airbnb 面试题汇总
- AllenNLP之入门解读代码
- xml测试_规范的XML测试
- linux引导文件制作U盘,Linux下制作U盘系统启动盘的方法
- 家庭服务器搭建,NAS存储
- 聊聊 Docker 的存储驱动 Overlay2
- 超简单! 一个标签搞定跑马灯,纯css制作跑马灯效果
- 移动流量转赠给好友_中国移动怎样转赠手机流量?月结流量用不完怎办
- Sources for ‘Android API 32 Platform’ not found
- 磨金石教育是正规的吗?插画好学吗?学习插画有哪些小技巧?