matlab 程序改写为 python 程序的方法

  • 概述
  • pandas 的作用
  • Matlab 和 Python 的差异
    • 索引操作符号:M(1),P[0]
    • 下标起始值:M从1开始,P从0开始
    • python 中 range(n) 从0开始,不包括结束点
    • 冒号操作符:M(1:10),P[0:10]
    • Matlab 中变量赋值会创建新的矩阵而 python 中只是创建一个引用
    • Matlab 中删除元素的操作
      • numpy 中的删除函数
      • pandas 中的删除函数
    • python 的幂运算符是 ** 而 matlab 是 ^
  • 转载说明

概述

将 matlab 代码改写为 python 代码是有技巧的,如果掌握,其实还是比较容易将一个 matlab 程序改写为 python 程序的。
因为 python 有很多优秀的数据处理函数库,最常用的就是 numpy 和 pandas 了。之所以能很方便地将 matlab 改写为 python 程序,就是因为这二者的存在。但是 matlab 的语法、约定和 python、numpy 以及 pandas 等在一些细节上是有区别的,如果不熟悉这些细微差异,那么改写完的代码很容易引入 bug,甚至无法正常运行。

下面我们先来看看大体上,将 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。

这个差异不但影响程直接访问元素的语句,还会影响包含循环语句的代码逻辑。
比如下面这段matlab 代码,转换成 python 代码时就需要注意下标差异。

L=length(A)
for i=1:L-1B = 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 npa = 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 内容:
dfA  B   C   D
0  0  1   2   3
1  4  5   6   7
2  8  9  10  11df.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 程序的方法相关推荐

  1. python程序设计基础电子书_python程序设计基础电子版(python程序设计基础) pdf

    python程序设计基础电子版(python程序设计基础)是一款最新打造的python教程书籍.这本书籍详细的讲解了Python语言以及基本方法,由浅入深.循序渐进,对于Python初学者来说本不错的 ...

  2. PHP程序员和Python程序员的职业前景怎么样?我来聊聊自己的体会

    大家好,今天我们来聊一下程序员这个职业的特点.在讲这个话题之前,我先说一下我自己的情况:我在福州和深圳做了8年左右的程序员,然后回到老家,在家里面为福州的一个公司做远程开发.目前已经在老家做了将近3年 ...

  3. 关于python中程序流程结构-Python程序结构

    2018年6月27日笔记 python流程控制 1.python流程控制语句结构 4种流程控制语句结构: if if -- else if -- elif --else if多条件 2.程序结构 3种 ...

  4. python 打开程序 最大化_@Python 程序员,如何最大化提升编码效率?

    作者 | Enoch CK 译者 | 刘畅 整理 | Jane 出品 | Python大本营 [导语]无论你是一位高级的AI工程师还是学生,你都会在工作或学习过程中需要用到 Python.自 1991 ...

  5. python编程在哪里写程序-第一个Python程序——在屏幕上输出文本

    本节我将给大家介绍最简单.最常用的 Python 程序--在屏幕上输出一段文本,包括字符串和数字. Python 使用 print 函数在屏幕上输出一段文本,输出结束后会自动换行. 在屏幕上输出字符串 ...

  6. python程序员发展-Python程序员的进化史

    不久前,在互联网上出现了一篇有趣的文章,讲的是对于同一个问题,不同层次的程序员编出的 Python 代码显示出了不同的风格,代码都很简单,有趣. 编程新手 def factorial(x): if x ...

  7. python 入门程序_非Python程序员的Python速成课程-如何快速入门

    python 入门程序 This article is for people who already have experience in programming and want to learn ...

  8. Python(2)-第一个python程序、执行python程序三种方式

    第一个Python 程序 1. 第一个Python 程序 2. 常用两Python个版本 3. 程序执行的三种方式 3.1 解释器 3.2 交互式运行Python程序 3.3 IDE(集成开发环境)- ...

  9. python怎么重复程序_利用Python程序完成ABAQUS中的一些重复性操作

    对于建立过大型的ABAQUS分析模型的同学们,肯定会面对繁琐的重复性建模过程.比如对上百个点施加集中力,比如建立几百个耦合约束.这些重复性操作,如果使用cae操作的话,不仅费时,而且极其容易出错. 利 ...

  10. python程序-第一个Python程序——在屏幕上输出文本

    本节我将给大家介绍最简单.最常用的 Python 程序--在屏幕上输出一段文本,包括字符串和数字. Python 使用 print 函数在屏幕上输出一段文本,输出结束后会自动换行. 在屏幕上输出字符串 ...

最新文章

  1. ntohs的一个简单实现(将网络流中用两个字节16进制表示的资源数(如DNS)和长度转换为整形)...
  2. Android开源框架源码鉴赏:Fresco
  3. 学习Java需要用到什么软件?
  4. “不正经”NIPS大会指北:嘻哈歌手、感人长队,以及最佳论文
  5. 保姆级的HTML零基础教程少见吧?这是第一节(1)
  6. 什么是CDN ,CDN的作用
  7. (96)FPGA时序违规案例(一)
  8. 从源码角度理解 FragmentTransaction实现
  9. 95-140-126-源码-transform-算子Sum
  10. python爬取NBA湖人队球星的数据,并且用Excel保存
  11. 2.2.2 物理层设备(中继器、集线器)(转载)
  12. PHP 的 Git 服务器被黑客入侵,源码库将永久迁移至 GitHub!
  13. python面向对象训练
  14. 拓端tecdat|R语言用igraph绘制网络图可视化
  15. 基于JAVA获取行政区边界坐标_从百度地图批量获取中国县级以上行政区划边界坐标...
  16. 2020-10-22标准正态分布表(scipy.stats)
  17. python群发邮箱软件下载_python qq邮件群发
  18. SAMBA+LDAP ERROR“smbd dead but pid file exists”
  19. 回归评价指标(MSE、RMSE、MAE、R-Squared、拟合优度)
  20. Robust Consistent Video Depth Estimation_具有鲁棒一致性的视频深度估计

热门文章

  1. ubuntu 使用gspca安装摄像头
  2. 浅谈BeanDefinition、BeanDefinitionMap、RootBeanDefintion三者的关系
  3. catia怎么进入装配_catia怎么装配步骤
  4. Qt qlabel 设置字体、大小、加粗等
  5. TCP的粘包问题以及数据的无边界性
  6. -1.#IND,1.#INF 的判断
  7. c 调用GetConsoleWindow () 几个解决方法
  8. MySQL 入门(六)—— 索引
  9. P1160 队列安排 (模拟链表)
  10. Charles抓包工具实战教程(完结)