python+NumPy+Scipy+matplotlib 约等于 matlab
=======================================
现在学术界越来越多人使用Python 语言取代Matlab 作为研究的主要程序编写工具。python语言看似有点类似matlab语言,对于习惯Matlab 的使用者来说,转换到Python语言应该并不困难,但是有些关键要注意的地方,也就是这两种语言的差别。掌握了两种语言的差别,我想从matlab过度到python也就不困难了。这里不考虑class(类)的情况下,讨论下两种语言基本语法上的一些差异。
1、第一个差异点在于Python 的index 起始值是从0 开始,而matlab是从1开始,Python 还有负号的index。多了负号的index 让Python 在撰写程序上又多了一些弹性。因为起始值从零开始,所以Python 的index 是落在数据与数据之间,而不是落在数据之上。例如,A = range(5), 得到A = [0,1,2,3,4]。这时,A[1:2]的答案是[1] 而不是[1,2],这点和Matlab 的习惯非常不同。
2、再來是Python虽然和Matlab 一样是一个高级的直译式语言,但是Python 不是专为矩阵计算设计的软件,例如matlab中 有x=[1,2,3],y=[2,4,6],z=x+y,z=[3,6,9],而如果在python中这样写z=[1,2,3,2,4,6],为了配合Python 更广泛的应用特性,要利用Python 处理数值或是矩阵计算时,最方便的方法是使用Numpy 库。通过其的array类来处理。
3、在运算子方面"^" 在Matlab 中是次方的意思,可是在Python 中的次方是**。例如2 的3 次方在Python 中的打法为2**3。"^"在Python 中並沒有完全被舍弃,而是作为位元运算的xor ,例如2^3=1,因为2 的二进位表示为0010,3 的二进位表示为0011,因此0010 与0011 的xor 是0001 其值为1。在Python 中这类不需要经过二进位转换就可以直接做二进位计算的位元算子还有& (and)以及 | (or)。
4、在Matlab 中常用的型別有整数,浮点数,布尔值,字元,字串,矩阵(或是阵列)以及异质阵列(cell),除了及异质阵列之位,多数的型別都是一般电脑语言常见的。Phthon 中多了一些特別的型別使得在程式撰写上,又多了一些弹性。首先,Phthon 中的串列(List)等同於Matlab 中的及异质阵列,串列里的元素型态不需拘泥于同一种格式,串列又可视为阵列的一中扩充,只是在形态上更具弹性。弹性有时是好事,但过度的弹性又会让程序员一不小心就制造一个难以纠正的bug,因此在Python 中特別出现一种无法更改內容的型为元组(tuple)。在Python中串列是用中括号[... ] 表示,而元组是用小括号(... ) 表示。无论是串列或是元组,都是一种有序的型別,意思是可以用指标(index) 去读取特定位置所存储的数据。Python 的另一个特別的型別叫做辞典,辞典是一个无序的数据型別,用大括号{... }來表示,要读取辞典內的数据必须用钥匙來开启。例如 A = {'name': 'Glophy', 'age': 18, 'url': 'http://glophy.com' }。要读取A 辞典內的数据,不能用A{1}, A{1:2} 这种方式,因为辞典是一个无序的数据型別。A 中的name, age 以及url 我們称为钥匙,钥匙后面加一个冒号(:),冒号后面所接的,就是存放在这钥匙所保管的箱子里的数据。
5、Python 省去了end 这种表示程序块结尾的用法,並且在程序块的第一行,用到":" 符号代表程序块的开始。少了end 程序要如何判別呢?Python 用叙述对齐的方式,來判断程序块是否結束(即程序块必须是tab键对齐的)。例如,
for i in range(5):
print i
print 'end'
这里for 程序块和最后一行的print 是同级的,for程序块只做到第一个print 指令。
6、在Matlab 里我们用'%' 符号代表程序中的注释,在Python 里,我们用'#' 代替。
除此在外在语法的关键字上还有一些区别,如matlab的函数定义用function,python用def等。
========================================================
|
|
matlab
|
python
|
|
逻辑行和物理行
|
用分号“;”
disp(‘hello’);disp(‘yes’)
|
用分号“;”
print “hello”;disp(‘yes’)
|
|
缩进
|
无要求,但是要程序有逻辑,清晰最好有缩进,尤其是同一层次用相同的缩进数目。
|
用缩进表示程序逻辑,要求同一层次的代码必须有相同的缩进空白数目,否则报错。
def myfun1(a,b):
c=a+b
return c
def myfun2(a,b):
c=a+b
return c
|
|
注释
|
%
|
#
|
|
续行
|
…
|
\
|
|
条件语句
|
if condition
elseif condition
else
end
|
if condition :
elif condition:
else:
|
|
循环语句
|
for number = 1:n
end
while condition
end
break 跳出整个循环
continue 跳出该次循环
|
for number in range(1,n) :
while :
break 跳出整个循环
continue 跳出该次循环
|
|
函数定义
|
function [output]=name(parameters)
end
|
def name(parameters):
return output
|
|
运算符
|
+,-,*,/,^
|
+,-,*,/,**
|
|
逻辑运算
|
>,<,>=,<=,==,~=
|
>,<,>=,<=,==,!=
|
|
布尔运算
|
&,&&
|,||
~
|
and
or
not
|
|
开始索引
|
1
|
0
|
|
整除问题
|
/直接取得准确结果
如,5/3
结果是1.6667
|
/两边是整数时候为整除
5/3
结果是1
|
|
数据结构
|
矩阵
结构体struct
patient.name = 'John Doe';
patient.billing = 127.00;
patient.test = [79, 75, 73; 180, 178, 177.5; 220, 210, 205];
元胞数组cell
|
列表list
mylist=[‘apple’,’mango’,’carrot’,’banana’]
字典dic
ab = { 'Swaroop' :'swaroopch@byteofpython.info',
'Larry' : 'larry@wall.org',
'Matsumoto' : 'matz@ruby-lang.org',
'Spammer' : 'spammer@hotmail.com'}
元组
zoo = ('wolf', 'elephant', 'penguin')
|
MATLAB 的大部分常用功能都可以在 Python 世界中找到相 应的扩展库。和 MATLAB 相比,用 Python 做科学计算有如下优点:
● 首先,MATLAB 是一款商用软件,并且价格不菲。而 Python 完全免费,众多开源的 科学计算库都提供了 Python 的调用接口。用户可以在任何计算机上免费安装 Python及其绝大多数扩展库。
● 其次,与 MATLAB 相比,Python 是一门更易学、更严谨的程序设计语言。它能让用 户编写出更易读、易维护的代码。
● 最后,MATLAB 主要专注于工程和科学计算。然而即使在计算领域,也经常会遇到 文件管理、界面设计、网络通信等各种需求。而 Python 有着丰富的扩展库,可以轻 易完成各种高级任务,开发者可以用 Python 实现完整应用程序所需的各种功能。
加载中,请稍候......