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 MATLAB基本数据类型
MATLAB以矩阵为基本数据单元,所有数据都可以视为矩阵。常用的数据类型包括:
矩阵的创建方法非常丰富:
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的数据类型更接近通用编程语言,主要包括:
序列的创建示例:
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 分支结构
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 算术运算符
MATLAB中的算术运算符注意区分矩阵运算和逐元素运算:
示例:
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
代码块
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: result = (x > y); 返回逻辑值。 Python: result = (x > y) 返回布尔值 True 或 False。
1.4.3 逻辑运算符
逻辑运算符用于组合布尔表达式:
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.5.1 基本输出
MATLAB:
matlab
代码块
PlainText
自动换行
复制代码
1234
disp('Hello, World!');
x = 3.14159;
fprintf('x = %.2f\n', x); % 保留两位小数
fprintf('x = %8.4f\n', x); % 宽度8,小数4位
复制成功
Python:
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文件操作:
Python文件操作:
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:计算圆的面积和周长(交互式)
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则凭借其丰富的深度学习库(如PyTorch、TensorFlow)成为现代机器视觉的主流语言。建议初学者同时熟悉两种语言,以便在不同场景下灵活选择。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删