我是靠谱客的博主 友好火车,这篇文章主要介绍写给Matlab用户的Python急速入门手册,现在分享给大家,希望可以做个参考。

文章目录

    • 基本差异
    • 循环和判断
    • switch
    • 函数
    • cell
    • 矩阵创建和索引
    • 矩阵计算和操作

基本差异

注释方案:Matlab中用%,Python用#

Matlab的索引默认从1开始,通过();Python则从0开始。用[]

python中的字符串通过单引号或者双引号表示。

循环和判断

matlab通过end来终结一段代码,而python则通过缩进来表示作用域,其声明与作用域之间通过:分隔。由于禁用的原因,下面所有Matlab代码均通过Octave完成。

下面对forif进行对比:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
%此为octave代码,貌似CSDN不支持matlab高亮。。。这里用的还是python的高亮 x = rand(10,1); for i = 1:10 if x(i)<0.3 fprintf("%f<0.3n",x(i)); else if x(i)>0.6 fprintf("%f>0.6n",x(i)); else printf("%fn",x(i)); end %匹配else if中的if end end % 下面为其输出 0.077700<0.3 0.203065<0.3 0.578026 0.752277>0.6 0.380363 0.541303 0.520777 0.031512<0.3 0.042714<0.3 0.986611>0.6 >>
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#此为python代码 import numpy as np x = np.random.rand(10) for i in range(10): if x[i]< 0.3: print(x[i],"<0.3") elif x[i]>0.6: print(x[i],">0.6") else: print(x[i]) # 下面为python的输出 0.13810550482646344 <0.3 0.05145857194203651 <0.3 0.40510564390649306 0.01924290850447119 <0.3 0.3126615170549344 0.9716907139903828 >0.6 0.3306312812282888 0.08156490331007271 <0.3 0.24120991717365392 <0.3 0.7177679530429059 >0.6 >>>

while也是一样的道理,breakcontinue也基本是相同的。

switch

Matlab中可以使用switch...case,python中没有这个语法,可以通过字典代替。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
x = [1,2,3,3,2,1]; for i = 1:6 switch x(i) case 1 disp('one') case 2 disp('two') otherwise disp('three') end end % 下面位计算结果 one two three three two one

在python中可以这样写:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
dic = {1:"one",2:"two",3:"three"} #定义一个字典 for i in x: print(dic[i]) # 下面为其输出结果 one two three three two one

函数

Matlab和Python的函数标识符分别为functiondef,接下来写一个阶乘

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
% 此为octave代码 function y = fac(x) if x>1 y = x*fac(x-1); else y = 1; end end % 下面位调用结果 >> fac(5) ans = 120
复制代码
1
2
3
4
5
6
7
# 此为python代码 def fac(x): return x*fac(x-1) if x > 1 else 1 #下面为调用 >>> fac(5) 120

匿名函数的区别

复制代码
1
2
3
4
5
6
7
% matlab >> sqr = @(x) x^2; >> sqr(3) ans = 9 >> (@(x) x^2)(5) ans = 25
复制代码
1
2
3
4
5
6
7
8
9
>>> sqr = lambda x:x**2 >>> sqr(3) 9 >>> (lambda x:x**2)(5) 25 >>> fac = lambda x : x*fac(x-1) if x > 1 else 1 >>> fac(5) 120

cell

Matlab中的cell相当于Python中的list。

复制代码
1
2
3
4
5
# 此为python代码 >>> x = [1,'2',3,[4,5]] >>> x [1, '2', 3, [4, 5]]

Matlab中一个类就是一个文件,且文件名和类名相同,文件需要在当前的工作路径中

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
% 此为Person.m文件中定义的类 classdef Person properties Age = 18; Gender = "girl"; Name = "Lily"; endproperties methods %类方法,静态方法需要加Static function setName(obj,string) obj.Name = string; endfunction function Intro(obj) fprintf("I'm %sn",obj.Name); endfunction endmethods endclassdef

python中可以在命令行中创建类,也可以在文件中创建类,如果在文件中创建了一个类,需要通过import进行导入,才能在命令行中调用。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> class Person: ... Age = 18 ... Gender = "girl" ... Name = "Lily" ... def setName(self, str): ... self.Name = str ... def Intro(self): ... print("I'm",self.Name) ... >>> p = Person() >>> p.setName("wang") >>> p.Intro() I'm wang

矩阵创建和索引

python的numpy包封装了大量数值计算功能,可以完美替代Matlab,下面的python代码中默认from numpy import *

下面的对比出numpy中文网:与 Matlab 比较

MatlabPython简略说明
[1 2 3; 4 5 6]array([[1.,2.,3.], [4.,5.,6.]])2x3矩阵
zeros(5,1)zeros([5,1])5×1零向量
ones(5)ones([5,5])5×5全1矩阵
eye(3)eye(3)3x3单位矩阵
rand(3,4)random.rand(3,4)3x4随机矩阵
1:5:20arange(1,20,5)[ 1, 6, 11, 16]
[A,A]hstack([A,B])横向拼接
[A;A]vstack([a,b])纵向拼接
A(end)A[-1]最后一个元素
A(2,5)A[1,4]返回第二行,第五列中的元素
A(2,:)A[1]A[1,:]第二行
a(1:5,:)A[0:5]A[:5]A[0:5,:]前五行
A(end-4:end,:)A[-5:]最后五行
A(1:3,5:9)A[0:3][:,4:9]1至3行与5至9列交叉的子矩阵
A([2,4,5],[1,3])A[ix_([1,3,4],[0,2])]第2,4,5行与第1,3列交叉的元素
A(3:2:21,:)A[2:21:2,:]第3行至第21行之间隔2行取1行
A(1:2:end,:)A[ ::2,:]返回a的奇数行
A(end: -1:1,:)A[ ::-1,:]行序转置

矩阵计算和操作

在Matlab中,元素之间的乘除法需要通过.来实现,Python则完全不需要。

MatlabPython简略说明
A.'A.T矩阵转置
A'A.conj().T共轭转置
A * BA @ B矩阵乘法
A .* Ba * b元素乘法
A./BA/B元素除法
A.^3A**3A的3次方
(A>0.5)(A>0.5)A中元素大于0.5的为True,否则为False
find(A>0.5)nonzero(A>0.5)A中所有大于0.5的元素的位置
A(A>0.5)A[A>0.5]返回A中大于0.5的元素
A(A<0.5)=0A[A<0.5]=0将A中小于0.5的元素置零
A(:)=3A[:]=3将所有值设为3
max(max(A))A.max()A的最大元素
max(A)A.max(0)每列矩阵的最大元素(第0个坐标轴方向取最大值)
max(A,[],2)A.max(1)每行矩阵最大元素
max(A,B)maximum(A, B)逐个比较A、B元素,返回每对中的最大值
norm(A)sqrt(A @ A)linalg.norm(v)2范数
inv(A)linalg.inv(A)方阵的逆
pinv(A)linalg.pinv(A)矩阵的伪逆
rank(A)linalg.matrix_rank(A)矩阵的秩
Ablinalg.solve(A,b)(A为方阵)
blinalg.lstsq(A,b)(A不必为方阵)
Ax = b的解x
fft(A)fft(A)傅立叶变换
ifft(A)ifft(A)逆傅立叶变换
sort(A)A.sort()排序

最后

以上就是友好火车最近收集整理的关于写给Matlab用户的Python急速入门手册的全部内容,更多相关写给Matlab用户内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(104)

评论列表共有 0 条评论

立即
投稿
返回
顶部