MATLAB用户如何切换到Python

MATLAB用户如何切换到Python

当我们从学术界进入工业界时,特别是工程界人士,我们面临着一个非常普遍的问题,即我们主要被教导的是过时的或接近过时的技术。例如,许多学校仍然使用MATLAB。在工程领域,无论是化学工程师、电气工程师,还是纳米工程师,大家一定都用过MATLAB

但是最近一段时间,我们可以看到企业正在从MATLAB转向Python。这可能是由于各种原因 −

  • 1000美元的许可费用

  • 低效的内存分配

  • 开放源码库的匮乏

  • 讨厌MATLAB的语法

想从MATLAB转到Python的人不用太担心,因为它们的语法几乎相似。

让我们来谈谈MATLAB用户的Python基础知识,重点是数据分析和可视化。

为矩阵使用者提供的实现

Numpy包括一些使其更容易使用矩阵类型的功能,这应该有助于MATLAB的转换。

  • 现在有一个matlib模块,包括流行的数组构造函数的矩阵,如
zeros(), ones(), empty(), rand(), eye(), and repmat()
  • 现在,一个数组可以被转换为一个矩阵,而不需要复制数据,因为mat是asmatrix的同义词,而不是矩阵。
  • 有一些顶级函数被取消了。举个例子,numpy.rand()必须作为numpy.random.rand()访问。另外,可以使用matlib模块的rand()方法。然而,使用numpy.random.random(),它和其他numpy函数一样,接受一个元组作为形状,是 “numpythonic “方法。

对于了解简单MATLAB语法的人来说,我们可以使用以下方法 −

mat = np.matrix('2,6,3;  0,2,5;  1,7,4')

但是在 Python 逻辑中,我们使用向量或列表。因此,下面的语法将是等同的 −

mat = np.matrix([[2,6,3], [0,2,5], [1,7,4]])

使用Python语言的语法,我们可以很容易地进行遍历,并获得值。

比如说,

示例

如果我们想得到第一个,即(0,0)值,我们可以简单地写成mat[0,0]:

import numpy as np
mat = np.matrix([
   [2,6,3],
   [0,2,5],
   [1,7,4]
])
print(mat[0,0])

输出

2

示例

第一列可以用 mat[:,0]访问 −

import numpy as np
mat = np.matrix([
   [2,6,3],
   [0,2,5],
   [1,7,4]
])
print(mat[: , 0])

输出

[[2]
[0]
[1]]

示例

只访问第一行 −

import numpy as np
mat = np.matrix([
   [2,6,3],
   [0,2,5],
   [1,7,4]
])
print(mat[0,:])

输出

[[2 6 3]]

MATLAB-NumPy的等价物

Submatrix

ix_命令可用于使用索引列表将数据分配给子矩阵。

例如,可以输入

index=[1,2];
matrix[np.ix_(index,index)]+=100

为二维数组矩阵。

示例

import numpy as np
mat = np.matrix([
   [2,6,3],
   [0,2,5],
   [1,7,4]
])
index=[1,2];
mat[np.ix_(index,index)]+=100
print(mat)

输出

[[ 2 6 3]
[ 0 102 105]
[ 1 107 104]]

帮助

虽然MATLAB缺乏与which命令直接对应的命令,但sourcehelp命令经常显示存储函数的位置的文件名。

此外,Python 包括一个 inspect 模块 (要使用这个模块,请导入 inspect),它提供了一个通常功能的 getfile。

索引

任何数组/序列的第一个元素都有索引1,因为MATLAB利用了基于1的索引。

任何数组/序列的第一个元素的索引都是0,因为Python利用了基于0的索引。

范围

在Python中,像0:5这样的构造只能作为切片索引使用;而在MATLAB中,0:5既可以作为“切片“索引(在方括号内),也可以作为范围(在括号内)。

因此,古怪的r_对象被开发出来,以便Numpy可以有一个类似的简洁的范围创建方法。

因为r_对象是用方括号来索引的,而不是像函数或函数Object() { [native code] }那样被调用,所以参数中可以使用切片语法。

Logicops

在MATLAB中,|和&是逻辑上的AND/OR,而在NumPy中,&或|是位法AND/OR。

任何具有大量编程知识的人都应该能够区分其中的差别。

虽然两者看起来功能相同,但还是有很大的区别。

以下是Numpy和MATLAB中的&和|操作符的一些关键区别 −

  • 0,1形式的非逻辑输入:Numpy的输出=输入的比特和。

  • 例如,Numpy中的(3 & 4)给出了0,而MATLAB中的(3 & 4)则返回1,因为3和4都被视为逻辑上的真实。

  • MATLAB的&运算符的优先级低于小于(<)和大于(>)等逻辑运算符;Numpy的优先级是相反的。

如果你确定你的参数是布尔运算,请使用Numpy的位运算符,但在使用圆括号时要谨慎,比如下面的例子 −

z = (x > 1) & (x 2)

Python设计的一个不理想的副作用是NumPy中缺少逻辑和、逻辑或运算符的形式。

重塑和线性索引

MATLAB允许通过使用线性或标量索引来访问多维数组,而Numpy则不允许。

在MATLAB程序中,线性索引经常被使用。

在转换MATLAB代码时,可能有必要先将一个矩阵重塑为线性序列,进行一些基于索引的操作,然后再重塑。

考虑到重塑(通常)会在相同的存储空间上创建视图,这应该可以合理地快速实现。应该注意的是,MATLAB使用的是Fortran顺序,而NumPy在使用reshape函数时默认的是C顺序。如果你只是从一个线性序列改成另一个,这就不重要了。

数据绘图

最后,当我们想使数据可视化时,绘图是很重要的。Python的Matplotlib函数提供了大量的函数来进行绘图操作。

import numpy as np
import matplotlib.pyplot as pltlib
mat = np.matrix([[1,1,1],[2,4,6],[5,7,6]])
pltlib.plot(mat[:,1])
pltlib.plot(mat[:,0])
pltlib.title('MATLAB Plot')
pltlib.xlabel('X-Axis')
pltlib.ylabel('Y-Axis')
pltlib.show()

MATLAB用户如何切换到Python

个性化的环境

在MATLAB中,您对工作空间进行个性化的主要选择是改变搜索路径,以包括自己喜欢的函数的位置。这样的修改可以包含在启动脚本中,当MATLAB启动时,它将被执行。

Python中的设施与NumPy中的设施是相同的。

定义 “PYTHONPATH “环境变量来改变Python的搜索路径,以便包括模块的位置。

当启动交互式Python解释器时,通过将 “PYTHONSTARTUP “环境变量设置为该文件的名称来指定一个特定的脚本文件来运行。

与MATLAB相比,在MATLAB中,路径上的任何东西都可以按愿望调用,而在Python中必须首先执行 “导入 “行,并在一个可以访问的特定文件中制作函数。

总结

在本教程中,我们学习了MATLAB用户如何切换到Python,并讨论了各种MATLAB-Python等价物。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Python 教程