前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >c++矩阵类_Matlab与Python的矩阵运算

c++矩阵类_Matlab与Python的矩阵运算

作者头像
用户7886150
修改2021-02-05 10:04:40
1.9K0
修改2021-02-05 10:04:40
举报
文章被收录于专栏:bit哲学院

参考链接: C++程序使用多维数组将两个矩阵相乘

知乎专栏:[代码家园工作室分享]收藏可了解更多的编程案例及实战经验。问题或建议,请留言;

  简述

  Matlab与NumPy/SciPy在功能实现上有很多相似之处。但在代码编译方面还有一些不同。NumPy与SciPy旨在基于Python下,通过最简单,自然的方式实现数学与科学计算,并非Matlab的简单复刻。本章我们从矩阵运算模块出发,对比Python与Matlab在实现矩阵创建与运算时的异同,以帮助习惯使用Matlab的用户快速熟悉并应用NumPy/SciPy库。

  array还是matrix?哪个更好用?

  NumPy提供了array与matrix两个类用于矩阵运算。array类可以用来处理各种n维数组的数学运算,而matrix类则是专用来进行二位矩阵运算的。这两种类只有以下几个微小的差异。用哪种类进行定义矩阵更好一些呢?

  Numpy的开发者团队推荐我们使用array类进行矩阵运算,简要原因如下:

  arrays是numpy库针对矢量/张量/矩阵定义的标准类。大多数Numpy返回的内容是array而非matrices类。array类进行元素间智能运算的代码与进行线性代数运算有着明显区别。Python 3.5以后NumPy支持使用 ‘@’ 符号进行矩阵点乘操作后续Numpy考虑删去np.matrix并将其统一到array类下。

  matrix类矩阵运算的部分操作与matlab更相近,下面的对比演示中我们会展示matlab/array/matrix三者在矩阵定义及运算中的异同。

  矩阵定义运算实例展示

  我们来列举一些常用的矩阵运算操作,对比其在Python_np,array,Python_np.matrix,Matlab上的实现方式

  矩阵赋值

  创建矩阵

  -Python_np,array

  import numpy 

  -Python_np.matrixmatrix定义二维矩阵的方式有以下两种

  import numpy 

  -Matlab

  A=[ 1 2 3 ; 4 5 6 ; 7 8 9 ]

  矩阵元素检索

  如何读取矩阵中某行某列的数值,如在以上矩阵中我们要识别第二行,第三列的数值-PythonPython的序列中各元素被视为第0个,第1个,第2个……接上段程序,此操作matrix类与array类并无区别。

  1,

  Matlab的序列中各元素被视为第1个,第2个,第3个……

  a23=A(2,3)

  矩阵点乘与元素智能相乘

  元素智能相乘即矩阵中各素分别对应相乘-Python_np.array

  #矩阵点乘,适用于Python 3.5以上版本

  -Python_np.martix

  #矩阵点乘

  -Matlab

  B=A*A %矩阵点乘B=A.*A %矩阵元素智能相乘

  快捷操作

  array可以使用.T快捷的实现矩阵转置,matrix可以使用.H,.I快捷的实现共轭转置矩阵及逆矩阵的求取。

  -Python_np.array

  #矩阵转置

  -Python.np.matrix

  #矩阵转置

  -Matlab

  AT=A.' %矩阵转置ACT=A' %求共轭转置矩阵AI=inv(A) %矩阵求逆

  matrix与array的其他差异

  -生成向量Matrix只能生成二维数组,array可以生成任何维度的数组。需要注意的是array生成的1维数组在进行矩阵点乘时,会视其在乘号左侧或右侧转化为对应的1xN或Nx1的矩阵。matrix则无法自动转化。

  此外由于在array中1xN数组为1维数组,其无法通过上述.T或np.transpose()操作转置成如Nx1矩阵(由于点乘时会自动变形,针对其的转置使用场景不多)。

  import numpy 

  输出结果分别如下

  1 

  所以在针对一维array数组进行转置操作时应该参考如下代码:

  import numpy 

  matrix与array类的优劣总结

  array

  √实现元素智能相乘更容易:A*B

  x执行矩阵点积运算需要使用@:A@B

  √对于一维array数组,在执行矩阵点积运算时,一维数组会视需要自动调整成所需的1xN或Nx1的矩阵,非常方便。

  √array是NumPy的默认类,在程序编写中得到了最多的测试,使用第三方代码时输入输出也多为此类。

  √可以支持多维运算

  √语法表述与张量运算更接近

  √所有运算(+ , - , * , / 等)与智能元素运算均一致。

  x与scipy.sparse共用时不太方便

  matrix

  √矩阵赋值更接近于Matlab

  x最多支持二维矩阵

  x最小支持二位矩阵,无法定义向量,只能定义单行或单列矩阵。

  x由于array是Numpy默认的类,部分第三方函数在输入matrix时也可能返回array类。

  √A*B进行点积更接近于线性代数的表达。

  x进行智能元素相乘时相对复杂,需要写成multiply(A,B)代码.

  x进行智能元素计算时逻辑有点混乱,”/”执行智能元素计算,而星号执行向量点积。

  √与scipy.sparse共用时代码相对简洁

  商业推广

  商业合作请进入淘宝店铺代码家园下单,硕博团队为大家提供涵盖深度学习,硬件开发,机械仿真,网页/应用开发等内容的定制化服务,新增Matlab代码转python服务,本团队具备规范化的服务流程与一对一的专业人员配置,保障高质高效服务用户需求。

    图注:代码家园淘宝店

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档