当前位置:网站首页 > Python编程 > 正文

matlab代码转为python_matlab可以运行python吗

为自己的产品代个言

为了解决 Matlab 代码转 Python 代码的工作,我们开发了 MaToPy,一套可以自动将 Matlab 代码转为 Python 代码的编译器和运行时函数库。
可以快速将 Matlab 代码自动转译为 Python 代码,得到的 Python 代码和 Matlab 代码极为相似,非常便于维护,且转换准确率很高,几乎不用人工修改就可以顺利运行。
想试用的朋友请移步这里:http://matopy.telecwin.com。

概述

下面我们先来看看大体上,将 matlab 程序转为 python 程序怎么做,然后再深入了解M和P程序的细微差异。

阅读本文前,最好有已经了解 numpy 和 pandas 的基本概念和用法。

  • Pandas 数据结构 - DataFrame
  • NumPy Ndarray 对象

pandas 的作用

pandas 主要承担下列matlab任务:

  • 读写数据文件,一般是 excel 文件。例如:读取输入参数文件;将计算结果输出到 excel 文件。
  • 按列名访问列数据、行数据。即使用 DataFrame 的行索引、列索引功能。

Matlab 和 Python 的差异

索引操作符号:M(1),P[0]

matlab 中访问矩阵中的元素,用圆括号做为索引操作符,像这样 A(1),而python中用方括号,像这样A[1]

下标起始值:M从1开始,P从0开始

matlab 行列下标都是从1开始;而 python,numpy,pandas 中下标都是从0开始,无论是 array 还是 list。

L=length(A) for i=1:L-1 B = A(i) C = A(i+1) end 

转为 python 代码:

L = len(A) for i in range(0, L): B = A[i] 

从上面的代码可以看到,如果要遍历一个数组 A,那么可以将 A 的长度 L=len(A) 作为range 的结束位置,而不会造成下标越界,因为 range(start, end) 总是不包含结束位置。

python 中 range(n) 从0开始,不包括结束点

python 中 range(start, end, step) 函数和 python 的“冒号操作符”是一样的规则,都不包括末尾下标,例如:

for i in range(0, 3): pass 

这段代码只会循环三次,i 取 0, 1, 2 这三个数,而不包括 3 。

冒号操作符:M(1:10),P[0:10]

matlab 中冒号操作符可以用来描述一个范围,且包含末尾下标。而 python 中冒号操作符虽然也是描述一个范围,但不包含末尾下标。这个区别非常容易导致转写的python代码出现bug,需要小心检查。

例如:

% 下面的 matlab 代码A将有10个数 A = M(1:10) 
# 和上面的 matlab 对应的 python 代码应该这样写: A = M[0:10] 

Matlab 中变量赋值会创建新的矩阵而 python 中只是创建一个引用

如果 numpy 中需要显式地copy一个矩阵,可以像这样:
d = a.copy() # a new array object with new data is created
del d # 删除变量,释放内存

Matlab 中删除元素的操作

在 Matlab 中可以用赋值空数组的方式删除满足条件的元素,例如:

% 删除第一行和第二行,可以这样写: A(1:2, :) = [] 

numpy 中的删除函数

而用 numpy 和 pandas 删除一行要这样写:

import numpy as np a = np.arange(12).reshape(3, 4) print(a) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]] a_del = np.delete(a, 1, 0) print(a_del) # [[ 0 1 2 3] # [ 8 9 10 11]] print(a) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]] 

其函数形式是 np.delete(ndarray对象, 行列索引, axis),其中 axis = 0 表示删除行,1表示删除列。
注意 np.delete 函数不会修改原 ndarray 对象,而是返回一个新对象。
而 matlab 则是直接修改原对象。

详情参考 numpy 的delete函数文档。

pandas 中的删除函数

pandas 中删除行列要用 drop() 函数。

df = pd.DataFrame(np.arange(12).reshape(3, 4), columns=['A', 'B', 'C', 'D']) # df 内容: df A B C D 0 0 1 2 3 1 4 5 6 7 2 8 9 10 11 df.drop(['B', 'C'], axis=1) df.drop(columns=['B', 'C']) # 返回的结果: A D 0 0 3 1 4 7 2 8 11 

注意:pandas drop() 也是返回修改后的对象,原对象没有被改变。但 drop() 可以用inplace=True 参数进行就地修改,这时返回的反而是修改前的数据,修改后的数据在原对象中。

详情参考pandas drop函数。

python 的幂运算符是 而 matlab 是 ^

matlab代码:

a = 10 ^ -3 

python 代码:

a = 10  -3 # 更好的方式是使用科学计数格式: a = 1E-3 

转载说明

文章为原创,欢迎转载,只要注明出处、作者(微风好飞行)即可。

------------------------ 2021年12月23日 于北京通州 ------------------------

到此这篇matlab代码转为python_matlab可以运行python吗的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • iterator泛型_python编译软件2024-11-19 19:09:08
  • 谷歌编程网站_python开发工具2024-11-19 19:09:08
  • 分析泛型类,泛型接口,泛型方法的特点_python编程代码大全2024-11-19 19:09:08
  • 零基础编程入门教程_python编程入门2024-11-19 19:09:08
  • PHP编程_网络爬虫python代码2024-11-19 19:09:08
  • Perl 的简介_perl python2024-11-19 19:09:08
  • scala编程基础和scala编程技术_scala和python2024-11-19 19:09:08
  • 如何从面向过程与面向对象转换过来_面向对象python2024-11-19 19:09:08
  • python 多进程通信_java高并发核心编程2024-11-19 19:09:08
  • 后端 框架_python后端框架2024-11-19 19:09:08
  • 全屏图片