背景

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

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

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


1. 矩阵的转置

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

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

A=[1234567810]A = \begin{bmatrix} 1&2&3\\ 4&5&6\\ 7&8&10\\ \end{bmatrix} A=⎣⎡​147​258​3610​⎦⎤​

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=⎣⎡​147​258​3610​⎦⎤​,B=⎣⎡​1713​3915​51116​⎦⎤​

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∑p​aik​bkj​,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=⎣⎡​147​258​3610​⎦⎤​,B=⎣⎡​1713​3915​51117​⎦⎤​

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=⎣⎡​147​258​3610​⎦⎤​,C=⎣⎡​54117193​66147243​75171283​⎦⎤​

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=⎣⎡​1713​3915​51116​⎦⎤​,C=⎣⎡​54117193​66147243​75171283​⎦⎤​

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 矩阵基本运算相关推荐

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

    背景 前段时间在知识星球上立了一个Flag,至少写10篇关于 Python,Matlab 和 C# 对比的总结. 这是第 3 篇,对比 Matlab 与 Numpy 在矩阵基本运算方面的区别与联系. ...

  2. matlab 和 numpy 矩阵乘法异同

    最近在用python做一点东西,发现python下面的矩阵运算和matlab是不同的,虽然之前找到了一个关于MATLAB与python在数学运算方面指令的对照表,但是感觉还是不够详细. 对照表链接:h ...

  3. python矩阵乘法 点乘_转(matlab和numpy矩阵乘法异同)

    广义的矩阵的矩阵乘法包括:矩阵相乘,矩阵点乘,向量乘法与向量点乘,内积. 对应的MATLAB有[* , .* , dot]三种运算符.分别表示的相乘,点乘和内积. 而在numpy中呢,也有*和dot两 ...

  4. MATLAB转置矩阵乘,【MATLAB】线性代数矩阵基本运算(转置,乘法,求逆)

    文章目录 创建矩阵 向量转置 矩阵乘法 单位矩阵 矩阵求逆 创建矩阵 MATLAB 提供了许多函数,用于创建各种类型的矩阵.例如,您可以使用基于帕斯卡三角形的项创建一个对称矩阵: A = pascal ...

  5. 【MATLAB】线性代数矩阵基本运算(转置,乘法,求逆)

    文章目录 创建矩阵 向量转置 矩阵乘法 单位矩阵 矩阵求逆 创建矩阵 MATLAB 提供了许多函数,用于创建各种类型的矩阵.例如,您可以使用基于帕斯卡三角形的项创建一个对称矩阵: A = pascal ...

  6. 技术图文:Matlab VS. Numpy 常见矩阵

    背景 前段时间在知识星球上立了一个Flag,至少写10篇关于 Python,Matlab 和 C# 对比的总结. 这是第 4 篇,对比 Matlab 与 Numpy 中经常用到的各种矩阵,比如零矩阵. ...

  7. matlab 矩阵命令,matlab中的矩阵的基本运算命令

    matlab中的矩阵的基本运算命令 (2013-07-19 08:45:49) 1.1 矩阵的表示 1.2 矩阵运算 1.2.14 特殊运算 1.矩阵对角线元素的抽取 函数 diag 格式 X = d ...

  8. MATLAB矩阵基本运算的实现(一)

    MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室),强大的矩阵运算能力是MATLAB的一个重要的特点,下面我就为大家整理了一下利用MATLAB实现矩阵基本 ...

  9. Python 矩阵基本运算【numpy】

    文章目录 一.实验说明 二.Python 矩阵基本运算 1. python矩阵操作 2. python矩阵乘法 3. python矩阵转置 4. python求方阵的迹 5. python方阵的行列式 ...

最新文章

  1. AI每日精选:新加坡批准AI血管超声扫描;蔚来硅谷裁员141人
  2. 使用MAT做jvm的GC Roots溯源
  3. 4j 设置日志保存天数_MySQL中的这几类日志,你一定要知道
  4. 【转】idea激活搭建授权服务器
  5. 2019-5-30-websocket下readyState常量
  6. html:(26):类选择器和id选择器
  7. gephi生成网络关系图_路网拓扑重建专题 (3) 网络图生成
  8. 频繁gc是什么意思_[JVM]一次线上频繁GC的问题解决
  9. CodeVs 1017 乘积最大(DP)
  10. vue项目H5 跳转微信小程序
  11. Airbnb 面试题汇总
  12. AllenNLP之入门解读代码
  13. xml测试_规范的XML测试
  14. linux引导文件制作U盘,Linux下制作U盘系统启动盘的方法
  15. 家庭服务器搭建,NAS存储
  16. 聊聊 Docker 的存储驱动 Overlay2
  17. 超简单! 一个标签搞定跑马灯,纯css制作跑马灯效果
  18. 移动流量转赠给好友_中国移动怎样转赠手机流量?月结流量用不完怎办
  19. Sources for ‘Android API 32 Platform’ not found
  20. 磨金石教育是正规的吗?插画好学吗?学习插画有哪些小技巧?

热门文章

  1. [HTTP协议]基础篇-待完结
  2. linux6直连存储挂载磁盘,CentOS7mount网络磁盘的详细步骤
  3. 哪些人适合参加Python培训班?
  4. 软件测试培训分享:Bug的作用有多大?
  5. 2.1:CGPROGRAM
  6. cocoapods使用教程
  7. android上line-height的问题
  8. Objective-C非正式协议与正式协议
  9. Unity3D移植到自己的Android程序
  10. GNU/Linux平台上正则表达式的简单使用