许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  编程基本知识以MATLAB和Python为例第一章

编程基本知识以MATLAB和Python为例第一章

阅读数 3
点赞 0
article_banner


学习目标

  • 理解编程的基本逻辑与程序执行流程
  • 掌握MATLAB和Python的常用数据类型及其用法
  • 熟练运用两种语言的流程控制结构(分支、循环)
  • 掌握基本输入输出方法和格式化输出技巧
  • 理解基本运算符的使用规则与优先级


1.1 编程基本逻辑

1.1.1 什么是程序?

程序是一系列指令的集合,告诉计算机如何执行特定任务。无论使用哪种编程语言,程序的核心逻辑都遵循三大基本结构:

  • 顺序结构:按代码书写顺序逐条执行
  • 分支结构:根据条件判断选择执行路径
  • 循环结构:重复执行某段代码直到满足退出条件

1.1.2 算法与程序的关系

  • 算法:解决问题的步骤描述(不依赖于具体语言)
  • 程序:用特定编程语言实现的算法

1.1.3 MATLAB与Python的编程范式

MATLAB和Python都是动态类型语言,变量无需声明即可使用。在编程范式上,MATLAB以面向矩阵编程为主,同时支持面向对象特性;Python则是多范式语言,支持面向对象、函数式和过程式编程。两者的执行方式均为解释执行:MATLAB提供命令行交互环境,而Python既支持交互式(如IDLE、Jupyter)也支持脚本执行。主要应用领域方面,MATLAB广泛应用于数值计算、仿真和算法原型开发,Python则凭借其通用性和丰富的库生态,在人工智能、Web开发、数据分析等多个领域占据主导地位。



1.2 数据类型

1.2.1 MATLAB基本数据类型

MATLAB以矩阵为基本数据单元,所有数据都可以视为矩阵。常用的数据类型包括:

  • 数值型: double:双精度浮点数,是MATLAB的默认数值类型,例如 a = 3.14; 有符号整数:如 int8、int32,用于节省内存,例如 b = int8(10); 无符号整数:如 uint8,特别适用于图像处理(像素值范围0~255),例如 c = uint8(255);
  • 字符型: char:字符数组,用单引号表示,如 str = 'Hello'; string:字符串数组(R2016b版本后引入),用双引号表示,如 str = "Hello";
  • 逻辑型:logical,布尔值 true 或 false,如 flag = true;
  • 复合类型: cell:元胞数组,可存放不同类型的数据,如 c = {'text', 123}; struct:结构体,通过字段名访问数据,如 s.name = 'Tom'; s.age = 20;

矩阵的创建方法非常丰富:

matlab

代码块

PlainText


     自动换行
   


     复制代码
   

12345


A = [1 2 3; 4 5 6];      % 2行3列矩阵
B = zeros(3,4);           % 3×4全零矩阵
C = ones(2,3);            % 2×3全1矩阵
D = eye(3);               % 3×3单位矩阵
E = rand(2,3);            % 2×3均匀分布随机数矩阵

      复制成功
     
     
     
     

1.2.2 Python基本数据类型

Python的数据类型更接近通用编程语言,主要包括:

  • 数值型: int:整数,无大小限制,如 a = 10 float:双精度浮点数,如 b = 3.14 complex:复数,如 c = 3+4j
  • 字符串:str,不可变字符序列,可以用单引号或双引号表示,如 s = 'Hello' 或 "Hello"
  • 布尔型:bool,值为 True 或 False(首字母大写)
  • 复合类型: list:列表,可变,可存放不同类型元素,如 lst = [1, 2, 'a'] tuple:元组,不可变,如 t = (1, 2, 'a') dict:字典,键值对,如 d = {'name': 'Tom', 'age': 20} set:集合,元素唯一,如 s = {1, 2, 3}

序列的创建示例:

python

代码块

PlainText


     自动换行
   


     复制代码
   

123456789101112


# 列表(可变)
lst = [1, 2, 3, 4, 5]
matrix = [[1, 2, 3], [4, 5, 6]]  # 嵌套列表表示矩阵

# 元组(不可变)
tup = (1, 2, 3)

# 字典
d = {"name": "Alice", "age": 25}

# 集合
s = {1, 2, 3, 4}

      复制成功
     
     
     
     

1.2.3 数据类型转换

MATLAB中可以使用类型转换函数:

matlab

代码块

PlainText


     自动换行
   


     复制代码
   

12345


x = 3.14;
y = int32(x);        % 浮点数转整数
z = double(y);       % 整数转浮点数
num = str2double('123');  % 字符串转数值
str = num2str(123);       % 数值转字符串

      复制成功
     
     
     
     

Python中同样提供内置转换函数:

python

代码块

PlainText


     自动换行
   


     复制代码
   

123456


x = 3.14
y = int(x)           # 浮点数转整数
z = float(y)         # 整数转浮点数
num = int('123')     # 字符串转整数
num2 = float('3.14') # 字符串转浮点数
s = str(123)         # 数值转字符串

      复制成功
     
     
     
     


1.3 流程控制

1.3.1 分支结构

MATLAB条件语句:

matlab

代码块

PlainText


     自动换行
   


     复制代码
   

12345678910111213141516171819202122


% if-elseif-else结构
x = 10;
if x > 0
    disp('x为正数');
elseif x < 0
    disp('x为负数');
else
    disp('x为零');
end

% switch结构
grade = 'B';
switch grade
    case 'A'
        disp('优秀');
    case 'B'
        disp('良好');
    case 'C'
        disp('及格');
    otherwise
        disp('需努力');
end

      复制成功
     
     
     
     

Python条件语句:

python

代码块

PlainText


     自动换行
   


     复制代码
   

123456789101112131415161718


# if-elif-else结构
x = 10
if x > 0:
    print('x为正数')
elif x < 0:
    print('x为负数')
else:
    print('x为零')

# Python没有switch,但可以用字典模拟
grade = 'B'
grade_map = {
    'A': '优秀',
    'B': '良好',
    'C': '及格'
}
result = grade_map.get(grade, '需努力')
print(result)

      复制成功
     
     
     
     

1.3.2 循环结构

MATLAB循环:

matlab

代码块

PlainText


     自动换行
   


     复制代码
   

12345678910111213141516171819202122232425262728


% for循环
for i = 1:5
    disp(['i = ', num2str(i)]);
end

% 遍历数组
A = [1 2 3; 4 5 6];
for i = 1:size(A, 1)
    for j = 1:size(A, 2)
        fprintf('A(%d,%d) = %d\n', i, j, A(i,j));
    end
end

% while循环
n = 1;
while n <= 5
    disp(n);
    n = n + 1;
end

% 向量化编程(避免循环,提高效率)
% 传统循环
v = 1:10;
for i = 1:length(v)
    v(i) = v(i)^2;
end
% 向量化实现(推荐)
v = v.^2;

      复制成功
     
     
     
     

Python循环:

python

代码块

PlainText


     自动换行
   


     复制代码
   

1234567891011121314151617181920212223


# for循环
for i in range(1, 6):  # range(1,6)生成1到5
    print(f'i = {i}')

# 遍历列表
lst = [1, 2, 3, 4, 5]
for item in lst:
    print(item)

# 使用enumerate同时获取索引和值
for idx, val in enumerate(lst):
    print(f'索引{idx}: {val}')

# 遍历字典
d = {'a': 1, 'b': 2}
for key, value in d.items():
    print(f'{key}: {value}')

# while循环
n = 1
while n <= 5:
    print(n)
    n += 1
    
      复制成功
     
     
     
     

1.3.3 循环控制语句

MATLAB提供了 break、continue 和 return:

matlab

代码块

PlainText


     自动换行
   


     复制代码
   

123456789101112131415


% break:跳出循环
for i = 1:10
    if i > 5
        break;
    end
    disp(i);
end

% continue:跳过本次循环
for i = 1:5
    if i == 3
        continue;
    end
    disp(i);
end

      复制成功
     
     
     
     

Python中对应的是 break、continue 和 pass(占位):

python

代码块

PlainText


     自动换行
   


     复制代码
   

1234567891011121314151617


# break
for i in range(1, 11):
    if i > 5:
        break
    print(i)

# continue
for i in range(1, 6):
    if i == 3:
        continue
    print(i)

# pass:占位语句,什么都不做
for i in range(5):
    if i == 2:
        pass  # 暂时不做处理
    print(i)
    
      复制成功
     
     
     
     


1.4 基本运算

1.4.1 算术运算符

MATLAB中的算术运算符注意区分矩阵运算和逐元素运算:

  • 加法 +、减法 - 与常规相同。
  • 乘法:* 表示矩阵乘法,.* 表示逐元素乘法。
  • 除法:/ 表示右除(矩阵除法),\ 表示左除(解线性方程组),./ 表示逐元素除法。
  • 幂运算:^ 表示矩阵乘方,.^ 表示逐元素乘方。
  • 取余:使用 mod(a, b) 函数。

示例:

matlab

代码块

PlainText


     自动换行
   


     复制代码
   

12345


A = [1 2; 3 4];
B = [2 0; 1 2];
C = A * B;        % 矩阵乘法
D = A .* B;       % 逐元素乘法
x = A \ b;        % 解线性方程组 Ax = b

      复制成功
     
     
     
     

Python中的算术运算符默认逐元素操作,但对内置列表不直接支持向量运算,通常需借助NumPy库:

  • 加法 +、减法 - 常规。
  • 乘法:* 对于列表是重复,对于NumPy数组是逐元素乘。
  • 除法:/ 总是返回浮点数结果(Python 3)。
  • 幂运算:**。
  • 取余:%。

使用NumPy示例:

python

代码块

PlainText


     自动换行
   


     复制代码
   

1234


import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = a * b  # 逐元素乘

      复制成功
     
     
     
     

1.4.2 关系运算符

关系运算符用于比较两个值,返回逻辑结果。两种语言基本相同,仅有细微符号差异:

  • 等于:==
  • 不等于:MATLAB用 ~=,Python用 !=
  • 大于:>
  • 小于:<
  • 大于等于:>=
  • 小于等于:<=

示例: MATLAB: result = (x > y); 返回逻辑值。 Python: result = (x > y) 返回布尔值 True 或 False。

1.4.3 逻辑运算符

逻辑运算符用于组合布尔表达式:

  • 与:MATLAB中标量用 &&,数组用 &;Python用 and。
  • 或:MATLAB中标量用 ||,数组用 |;Python用 or。
  • 非:MATLAB用 ~;Python用 not。

MATLAB示例:

matlab

代码块

PlainText


     自动换行
   


     复制代码
   

123456789


a = true; b = false;
c = a && b;        % false
d = a || b;        % true
e = ~a;            % false

% 数组逻辑运算
A = [1 2; 3 4];
B = [0 2; 3 1];
C = (A > 2) & (B < 3);  % 逐元素逻辑与

      复制成功
     
     
     
     

Python示例:

python

代码块

PlainText


     自动换行
   


     复制代码
   

1234


a = True; b = False
c = a and b      # False
d = a or b       # True
e = not a        # False

      复制成功
     
     
     
     

1.4.4 运算符优先级

从高到低的一般顺序为:

  1. 括号 ()
  2. 幂运算(MATLAB: ^,Python: **)
  3. 正负号(+ -)
  4. 乘除(* /)
  5. 加减(+ -)
  6. 关系运算(> < ==等)
  7. 逻辑非(MATLAB: ~,Python: not)
  8. 逻辑与(MATLAB: &/&&,Python: and)
  9. 逻辑或(MATLAB: |/||,Python: or)

建议在复杂表达式中使用括号明确优先级,提高可读性。



1.5 输入输出

1.5.1 基本输出

MATLAB:

  • disp 函数直接显示内容,可显示字符串或数值。
  • fprintf 提供格式化输出,类似C语言。

matlab

代码块

PlainText


     自动换行
   


     复制代码
   

1234


disp('Hello, World!');
x = 3.14159;
fprintf('x = %.2f\n', x);        % 保留两位小数
fprintf('x = %8.4f\n', x);       % 宽度8,小数4位

      复制成功
     
     
     
     

Python:

  • print 函数是最常用的输出方式。
  • 格式化输出有多种方式,推荐使用 f-string(Python 3.6+)。

python

代码块

PlainText


     自动换行
   


     复制代码
   

1234567


print('Hello, World!')
name = 'Alice'; age = 25
print(f'{name} is {age} years old')   # f-string
print('{} is {} years old'.format(name, age))  # format方法
print('%s is %d years old' % (name, age))      # %格式化
pi = 3.14159
print(f'pi = {pi:.2f}')        # 保留两位小数

      复制成功
     
     
     
     

1.5.2 基本输入

MATLAB的 input 函数:

matlab

代码块

PlainText


     自动换行
   


     复制代码
   

12


name = input('请输入您的姓名:', 's');    % 字符串输入
age = input('请输入您的年龄:');          % 数值输入

      复制成功
     
     
     
     

Python的 input 函数总是返回字符串,需手动转换类型:

python

代码块

PlainText


     自动换行
   


     复制代码
   

123


name = input('请输入您的姓名:')
age = int(input('请输入您的年龄:'))      # 转换为整数
height = float(input('请输入您的身高(米):'))

      复制成功
     
     
     
     

1.5.3 文件输入输出

MATLAB文件操作:

  • 保存/加载MAT文件:save('data.mat', 'A', 'B'); load('data.mat');
  • 文本文件读写:save('data.txt', 'data', '-ascii'); loaded_data = load('data.txt');
  • CSV文件:writematrix(data, 'data.csv'); csv_data = readmatrix('data.csv');

Python文件操作:

  • 文本文件:使用 with open(...) as f 上下文管理器,提供 write()、read()、readlines() 等方法。
  • CSV文件:使用标准库 csv 模块。

python

代码块

PlainText


     自动换行
   


     复制代码
   

123456789101112131415161718192021


# 文本文件写入
with open('output.txt', 'w') as f:
    f.write('Hello, World!\n')
    f.write(f'计算结果:{result}\n')

# 文本文件读取
with open('output.txt', 'r') as f:
    content = f.read()           # 读取全部内容
    lines = f.readlines()        # 按行读取到列表

# CSV文件处理
import csv
data = [[1, 2, 3], [4, 5, 6]]
with open('data.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerows(data)

with open('data.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)
        
      复制成功
     
     
     
     


1.6 综合示例

示例1:计算圆的面积和周长(交互式)

MATLAB版本:

matlab

代码块

PlainText


     自动换行
   


     复制代码
   

123456789101112


% circle_calc.m
r = input('请输入圆的半径:');
if r <= 0
    disp('半径必须为正数!');
else
    area = pi * r^2;
    circumference = 2 * pi * r;
    
    fprintf('半径: %.2f\n', r);
    fprintf('面积: %.4f\n', area);
    fprintf('周长: %.4f\n', circumference);
end

      复制成功
     
     
     
     

Python版本:

python

代码块

PlainText


     自动换行
   


     复制代码
   

12345678910111213


# circle_calc.py
import math

r = float(input('请输入圆的半径:'))
if r <= 0:
    print('半径必须为正数!')
else:
    area = math.pi * r ** 2
    circumference = 2 * math.pi * r
    
    print(f'半径: {r:.2f}')
    print(f'面积: {area:.4f}')
    print(f'周长: {circumference:.4f}')
    
      复制成功
     
     
     
     

示例2:统计成绩(数组/列表操作)

MATLAB版本:

matlab

代码块

PlainText


     自动换行
   


     复制代码
   

123456789101112131415161718192021222324252627282930313233343536


% grade_stats.m
scores = [85, 92, 78, 90, 88, 76, 95, 89];

avg_score = mean(scores);
max_score = max(scores);
min_score = min(scores);
passed = sum(scores >= 60);          % 及格人数
fail = sum(scores < 60);              % 不及格人数

fprintf('平均分: %.2f\n', avg_score);
fprintf('最高分: %d\n', max_score);
fprintf('最低分: %d\n', min_score);
fprintf('及格人数: %d\n', passed);
fprintf('不及格人数: %d\n', fail);

% 分级统计
grades = zeros(1, 5);  % A,B,C,D,E
for i = 1:length(scores)
    if scores(i) >= 90
        grades(1) = grades(1) + 1;
    elseif scores(i) >= 80
        grades(2) = grades(2) + 1;
    elseif scores(i) >= 70
        grades(3) = grades(3) + 1;
    elseif scores(i) >= 60
        grades(4) = grades(4) + 1;
    else
        grades(5) = grades(5) + 1;
    end
end

fprintf('A(90+): %d\n', grades(1));
fprintf('B(80-89): %d\n', grades(2));
fprintf('C(70-79): %d\n', grades(3));
fprintf('D(60-69): %d\n', grades(4));
fprintf('E(<60): %d\n', grades(5));

      复制成功
     
     
     
     

Python版本:

python

代码块

PlainText


     自动换行
   


     复制代码
   

123456789101112131415161718192021222324252627282930313233343536


# grade_stats.py
import statistics

scores = [85, 92, 78, 90, 88, 76, 95, 89]

avg_score = statistics.mean(scores)
max_score = max(scores)
min_score = min(scores)
passed = sum(1 for s in scores if s >= 60)  # 及格人数
fail = len(scores) - passed                  # 不及格人数

print(f'平均分: {avg_score:.2f}')
print(f'最高分: {max_score}')
print(f'最低分: {min_score}')
print(f'及格人数: {passed}')
print(f'不及格人数: {fail}')

# 分级统计
grades = {'A': 0, 'B': 0, 'C': 0, 'D': 0, 'E': 0}
for s in scores:
    if s >= 90:
        grades['A'] += 1
    elif s >= 80:
        grades['B'] += 1
    elif s >= 70:
        grades['C'] += 1
    elif s >= 60:
        grades['D'] += 1
    else:
        grades['E'] += 1

print(f'A(90+): {grades["A"]}')
print(f'B(80-89): {grades["B"]}')
print(f'C(70-79): {grades["C"]}')
print(f'D(60-69): {grades["D"]}')
print(f'E(<60): {grades["E"]}')

      复制成功
     
     
     
     


本章小结

通过本章学习,我们对比了MATLAB和Python两种语言在编程基础方面的异同。

  • 数据类型:MATLAB以矩阵为核心,支持数值、字符、逻辑、元胞数组和结构体;Python则提供更通用的列表、元组、字典、集合等复合类型,数值类型包括int、float和complex。
  • 数组与矩阵操作:MATLAB原生支持矩阵运算,运算符丰富且区分矩阵和逐元素操作;Python内置列表不支持向量化运算,需借助NumPy库实现类似功能。
  • 索引方式:MATLAB索引从1开始,使用圆括号,如A(2,3);Python索引从0开始,使用方括号,如lst[2]。
  • 分支与循环:两种语言都支持if-elif-else结构,MATLAB有switch,Python可通过字典模拟;循环方面,MATLAB的for基于冒号表达式,Python的for常用于遍历可迭代对象。
  • 运算符:算术运算符在两种语言中略有不同,特别是MATLAB的点运算符用于逐元素操作;关系运算符基本相同,仅不等于符号不同(MATLAB为~=,Python为!=);逻辑运算符MATLAB用&&、||、~,Python用and、or、not。
  • 输入输出:MATLAB的input可指定类型,Python的input统一返回字符串;输出方面,MATLAB的disp和fprintf与Python的print和格式化字符串(f-string)对应。
  • 文件操作:两种语言都支持文本文件和CSV文件的读写,MATLAB提供高级函数如save/load、writematrix/readmatrix,Python使用内置open函数和csv模块。

掌握这些基础概念后,我们将能够在后续课程中更自如地编写图像处理程序。MATLAB适合快速算法原型验证,Python则凭借其丰富的深度学习库(如PyTorch、TensorFlow)成为现代机器视觉的主流语言。建议初学者同时熟悉两种语言,以便在不同场景下灵活选择。



思考与练习

  1. 基础练习:编写程序,输入三个数,输出其中的最大值和最小值。
  2. 循环练习:用循环生成Fibonacci数列的前20项,并计算相邻两项的比值,观察是否趋近于黄金分割比。
  3. 数据处理:创建一个包含10个随机数的数组/列表,计算其均值、方差,并将大于均值的元素保存到新数组/列表中。
  4. 文件操作:生成100个随机数,保存到文件"random.txt"中,然后读取该文件并绘制直方图(MATLAB用histogram,Python用matplotlib)。
  5. 对比思考:MATLAB的向量化编程与Python的列表推导式有何异同?各自优势是什么?

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空