目录
1 概述
2 Python和Matlab比较
2.1 编程习惯
2.2 符号表示对比
2.3 基本数据类型
2.3.1 Python的Dictionary和Matlab的struct的比较
2.3.2 Python的List和Matlab的Cell Array比较
2.3.4 Python的切片和Matlab的切片比较
2.3.5 Python和Matlab在末尾追加元素
3 函数
1 概述
之所以标题这样安排,是因为我个人更喜欢Python,无论是对于未来发展(人工智能)还是给浪漫代码图等等。软件质量:首页 |TIOBE - 软件质量公司
主要是Python是免费的,matlab要N多美刀,好多时候本专业对matlab要求较高,所以对两门编程软件都浅有研究,个人觉得长远发展用Python,Matlab适合学生阶段搞科研比较棒。
建议两者都学,累是累点,放在长远来看,还是那句话,未来的你一定会感谢现在奋斗的自己。对你价值的投资,你不会后悔的,加油吧,少年!
鸡血灌满了,下面完成我们今天的任务:系统比较一下Python和Matlab。
2 Python和Matlab比较
2.1 编程习惯
Python | Matlab | |
注释 | # | % |
续行 | / | … |
缩进 | 用缩进表示程序逻辑,要求同一层次的代码必须有相同的缩进空白数目,否则报错。 错: def myfun2(a,b): c=a+b return c 对: def myfun2(a,b): c=a+b return c | 无要求,但是要程序有逻辑,清晰最好有缩进,尤其是同一层次用相同的缩进数目。 |
开始索引 | 从0开始 | 从1开始 |
索引符号 | [ ] | ( ) |
格式化输出 | print('{0},{1},{2}'.format('lin', 'male', 25)) | >> k='uid'; ans = uid=sa |
打印 | print函数 | disp( ) : 形同Python中print函数,需要打印的内容放入 ’ ’ 内,若需要打印的内容中包含变量,如 num2str (n)与 ’ 123 ’ 需要使用 [ ]包住,连接各输出内容时不需要 ’ + ’ 号 |
输入 | input函数 | input : 使用方式与Python中大致相同,需要打印内容时方式与disp一致,输入多个值时需要使用 [ , , ] 分隔开,输入字符串时使用 ’ ’ |
结尾是否需要“,” | 不需要 | 需要“,” |
2.2 符号表示对比
Python | Matlab | |
运算符 | +,-,*,/,** | +,-,*,/,^ |
逻辑运算 | >,<,>=,<=,==,!= | >,<,>=,<=,==,~= |
布尔运算 | and or not | &,&& |,|| ~ |
整除问题 | /两边是整数时候为整除 5/3 结果是1 | /直接取得准确结果 如,5/3 结果是1.6667 |
2.3 基本数据类型
2.3.1 Python的Dictionary和Matlab的struct的比较
Python | Matlab | |
Dictionary VS struct | Python中定义Dictionary: >>> d = {"server":"mpilgrim", "database":"master"} | Matlab中创建struct: >> d = struct('server','mpilgrim', 'database','master') |
在Python中通过key来查找value: >>> d["server"] | 在Matlab中通过字符串形式的fieldname来查找value(Using Dynamic Field Names): >> d.('server') ans = mpilgrim >> d.('database') ans = master | |
在Python中不能通过value来获取key: >>> d["mpilgrim"] | 在Matlab中也不行(不能通过value来查找fieldname): >> d.('mpilgrim') | |
在Python中修改已经存在的key的value: >>> d["database"] = "pubs" | 在Matlab中修改已经存在的field的value: >> d.('database')='pubs' d = server: 'mpilgrim' | |
在Python中添加新的key-value对: >>> d["uid"] = "sa" | 在Matlab中添加新的field: >> d.('uid')='sa' d = server: 'mpilgrim' | |
在Python中删除Dictionary的元素: >>> d | 在Matlab中删除stuct的field: >> d=struct('database', 'master', 'uid', 'sa', 'server', 'mpilgrim') d = database: 'master' rmfield(d,'uid') d = database: 'master' | |
在Python中删除Dictionary所有元素: >>> d.clear() | 在Matlab中删除struct所有field: >> d=struct() d = 1x1 struct array with no fields. |
2.3.2 Python的List和Matlab的Cell Array比较
Python | Matlab | |
List VS Cell Array | Python的List的下标从0开始 | Matlab的Cell Array的下标从1开始。 |
Python中List的定义: >>> li = ["a", "b", "mpilgrim", "z", "example"] | Matlab中Cell Array的定义: >> li = {'a', 'b', 'mpilgrim', 'z', 'example'} li = 'a' 'b' 'mpilgrim' 'z' 'example' >> li(1) ans = 'a' >> li(5) ans = 'example' | |
Python中可使用负的List索引 | 但Matlab中不能用负数来索引Cell Array |
2.3.4 Python的切片和Matlab的切片比较
Python | matlab | |
Python中List的slice: >>> li[0:3] 0:3表示得到下标为0、1、2的List元素。 由此可见在Slice这个功能上Python和Matlab很相似但也有很大不同。 | 在Matlab中想要对Cell Array 实现类似的效果要这样做: >> li(1:3) ans = 'a' 'b' 'mpilgrim' 1:3是一个向量(1,2,3),用这个向量作为下标对li进行索引。 | |
Slice的简写: 在Python中: >>> li[:3] | 但是在Matlab中不能这样做,只能写成: >> li(1:3) ans = 'a' 'b' 'mpilgrim' >> li(4:end) ans = 'z' 'example' |
2.3.5 Python和Matlab在末尾追加元素
Python | Matlab | |
在Python中对List,可以使用append和extend来实现,但两者功能有所不同,append用来追加单个元素,extend用来进行List的连接。 在Python中对List使用extend: >>> li = ['a', 'b', 'c'] | 在Matlab中对Cell Array实现类似的效果: >> li={'a','b','c'} li = 'a' 'b' 'c' >> li=[li {'d','e','f'}] li = 'a' 'b' 'c' 'd' 'e' 'f' | |
>>> len(li) 6 | >> numel(li) ans = 6 | |
在Python中对List使用append: >>> li = ['a', 'b', 'c'] | 在Matlab中对Cell Array实现类似效果: >> li={'a','b','c'} li = 'a' 'b' 'c' >> li{end+1}={'d','e','f'} li = 'a' 'b' 'c' {1x3 cell} >> numel(li) ans = 4 >> li{end} ans = 'd' 'e' 'f' |
3 函数
Python | matlab | |
函数定义 | def name(parameters): return output | function [output]=name(parameters) end |
条件语句 | if condition : elif condition: else: | if condition elseif condition else end |
循环语句 | for number in range(1,n) : while : break 跳出整个循环 continue 跳出该次循环 | for number = 1:n end while condition end break 跳出整个循环 continue 跳出该次循环 |
lambda | Python中使用lambda函数: >>> g = lambda x: x*2 | 在Matlab中实现: >> g=@(x)x*2; ans = 6 |
在Python中还可这样用: >>> (lambda x: x*2)(3) | 但是Matlab中好像不行: >> @(x)x*2(3) |