MATLAB 用户的 Python

pythonserver side programmingprogramming更新于 2024/1/17 12:46:00

当我们从学术界进入行业时,尤其是工程界人士,我们面临一个非常普遍的问题,即我们主要学习过时或接近过时的技术。例如,许多学校仍在使用 MATLAB。在工程领域,无论是化学工程师、电气工程师还是纳米工程师,每个人都必须使用过 MATLAB。

但近年来,我们可以看到企业正在从 MATLAB 转向 Python。这可能由多种原因造成 −

  • $1000 许可成本

  • 内存分配效率低下

  • 开源库匮乏

  • 讨厌 MATLAB 语法。

想要从 MATLAB 切换到 Python 的人不必担心,因为它们的语法几乎相似。

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

矩阵用户的便利

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

  • 现在有一个 matlib 模块,其中包含用于流行数组构造函数的矩阵,例如

zeros()、ones()、empty()、rand()、eye() 和 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 等效项

子矩阵

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]]

Help

尽管 MATLAB 缺少与 which 命令直接等效的命令,但 sourcehelp 命令经常显示存储函数位置的文件名。

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

索引

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

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

范围

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

因此,开发了奇怪的 r_ object,以便 Numpy 可以拥有类似简洁的范围创建方法。

由于 r_ object 使用方括号进行索引,而不是像函数或 function Object() { [native code] } 那样调用,因此可以在参数中使用切片语法。

Logicops

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

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

尽管两者似乎功能相同,但存在显着差异。

以下是 Numpy 和 MATLAB 中 & 和 | 运算符之间的一些主要区别 -

  • 形式为 0,1 的非逻辑输入:Numpy 的输出 = 输入的按位与。

  • MATLAB 返回逻辑与并将 0 以外的任何值视为 1。例如,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 在使用重塑函数时默认使用 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 个性化工作区的方法是通过更改搜索路径来包含自己喜欢的函数的位置。此类修改可以包含在启动脚本中,MATLAB 启动时将执行该脚本。

Python 中的功能与 NumPy 中的功能相同。

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

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

与 MATLAB 不同,在 MATLAB 中可以根据需要调用路径上的任何内容,必须首先在 Python 中执行"import"行并在可访问的特定文件中创建函数。

结论

在本教程中,我们了解了 MATLAB 用户如何切换到 Python,并讨论了各种 MATLAB-Python 等效项。


相关文章