IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 写给Matlab用户的Python急速入门手册 -> 正文阅读

[Python知识库]写给Matlab用户的Python急速入门手册

Matlab是什么?是计算领域的经典VB,他们分别在各自领域处于鄙视链的最底层。

当然,这个鄙视链是程序员的鄙视链,对于不想对编程有深入了解的人,可以无视,更没必要继续看本文了。但考虑到动则小百万的价格,对于不想或者无法脱离Matlab的朋友,这里推荐用Octave——一个与Matlab语法几乎相同的开源计算工具。

基本差异

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

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

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

循环和判断

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

下面对forif进行对比:

%此为octave代码,貌似CSDN不支持matlab高亮。。。这里用的还是python的高亮
x = rand(10,1);
for i = 1:10
    if x(i)<0.3
        fprintf("%f<0.3\n",x(i));
    else if x(i)>0.6
        fprintf("%f>0.6\n",x(i));
    else
        printf("%f\n",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
>>
#此为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中没有这个语法,可以通过字典代替。

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中可以这样写:

dic = {1:"one",2:"two",3:"three"}   #定义一个字典
for i in x:
    print(dic[i])

# 下面为其输出结果
one
two
three
three
two
one

函数

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

% 此为octave代码
function y = fac(x)
    if x>1
        y = x*fac(x-1);
    else
        y = 1;
    end
end
% 下面位调用结果
>> fac(5)
ans = 120
# 此为python代码
def fac(x):
    return x*fac(x-1) if x > 1 else 1
#下面为调用
>>> fac(5)
120

匿名函数

% matlab
>> sqr = @(x) x^2;
>> sqr(3)
ans = 9
>> (@(x) x^2)(5)
ans = 25
>>> 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。

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

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

% 此为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 %s\n",obj.Name);      
    endfunction
  endmethods
endclassdef

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

>>> 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)矩阵的秩
A\blinalg.solve(A,b)(A为方阵)
blinalg.lstsq(A,b)(A不必为方阵)
Ax = b的解x
fft(A)fft(A)傅立叶变换
ifft(A)ifft(A)逆傅立叶变换
sort(A)A.sort()排序
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-11-04 13:41:27  更:2021-11-04 13:41:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 23:58:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码