Skip to content

MATLAB - 数组函数

MATLAB 是一种基于矩阵的语言,这意味着数组(向量和矩阵)是一等公民。高效地创建和操作数组是任何 MATLAB 用户最重要的技能。本教程涵盖了数组创建、检查和操作的基本函数。

这些函数用于初始化具有特定大小和内容的数组。

函数名称描述
zeros创建全零数组。
ones创建全一数组。
eye创建单位矩阵(对角线上为一,其他地方为零)。
rand创建介于 0 和 1 之间的均匀分布随机数数组。
randn创建均值为 0、方差为 1 的正态分布(高斯)随机数数组。
linspace创建两个端点之间线性间隔点的向量。
magic创建魔方矩阵(用于演示目的)。
% 创建一个 3x4 的零矩阵
A = zeros(3, 4);
% 创建一个 2x2 的全一矩阵
B = ones(2, 2);
% 创建一个 4x4 的单位矩阵
I = eye(4);
% --- 可复现的随机数 ---
% 最佳实践:设置随机种子以获得可复现的结果
rng('default');
% 创建一个 2x5 的均匀分布随机数矩阵
U = rand(2, 5);
% 创建一个 3x1 的正态分布随机数列向量
N = randn(3, 1);

一旦数组存在,您需要查询其属性并更改其形状。

函数名称描述
size以行向量形式返回数组的维度。
length返回最大维度的长度。
numel返回数组中的元素总数。
reshape更改数组的维度而不改变其数据。
' (apostrophe)执行复共轭转置。对于实数矩阵,这是简单的转置。
transpose执行非共轭转置。
% 创建一个示例矩阵
M = [1, 2, 3; 4, 5, 6];
% 获取大小信息
dims = size(M) % 结果: [2, 3]
num_elements = numel(M) % 结果: 6
% 将 2x3 矩阵重塑为 3x2 矩阵
M_reshaped = reshape(M, 3, 2);
% 结果:
% 1 5
% 4 3
% 2 6
% 转置矩阵
M_transposed = M'; % 使用撇号运算符进行转置
% 结果:
% 1 4
% 2 5
% 3 6

MATLAB 提供了丰富的函数库,可以一次性操作整个数组,这被称为向量化。

函数名称描述与主要用法
sumsum(A) 求每列的和。sum(A, 2) 求每行的和。sum(A, 'all') 求所有元素的和。
meanmean(A) 查找每列的平均值。对于其他情况,请使用与 sum 类似的维度参数。
maxmax(A) 查找每列的最大值。[M, I] = max(A) 也返回索引。
min查找最小元素,语法与 max 类似。
sortsort(A) 对每列进行排序。sort(A, 'descend') 按降序排序。
unique返回数组中唯一的元素,并进行排序。
% 让我们分析一个包含 3 名学生在 4 次考试中成绩的矩阵
grades = [85, 92, 78, 88; ...
95, 89, 91, 94; ...
76, 81, 85, 79];
% 计算每次考试的平均成绩(每列的平均值)
avg_test_grade = mean(grades)
% 结果: [85.33, 87.33, 84.67, 87.00]
% 计算每名学生的平均成绩(每行的平均值)
avg_student_grade = mean(grades, 2)
% 结果:
% 85.75
% 92.25
% 80.25
% 找出每次考试的最高成绩(每列的最大值)
[highest_grades, student_id] = max(grades)
% 结果:
% highest_grades = [95, 92, 91, 94]
% student_id = [2, 1, 2, 2] (学生 2 在 3 次考试中获得最高分)
% 找出所有考试的总分
total_score = sum(grades, 'all')
% 结果: 1018

有效 MATLAB 编程的核心原则是向量化。这意味着尽可能使用数组范围的操作而不是 for 循环。向量化代码更简洁、可读性更高,并且速度显著更快。

% --- 缓慢的非向量化方式(避免) ---
x = 1:1000;
y = zeros(size(x));
for i = 1:length(x)
y(i) = sin(x(i));
end
% --- 快速的向量化 MATLAB 方式(推荐) ---
x = 1:1000;
y = sin(x); % 将 sin 直接应用于整个向量