MATLAB - 数组函数
MATLAB - 基本数组函数
Section titled “MATLAB - 基本数组函数”MATLAB 是一种基于矩阵的语言,这意味着数组(向量和矩阵)是一等公民。高效地创建和操作数组是任何 MATLAB 用户最重要的技能。本教程涵盖了数组创建、检查和操作的基本函数。
I. 数组创建函数
Section titled “I. 数组创建函数”这些函数用于初始化具有特定大小和内容的数组。
| 函数名称 | 描述 |
|---|---|
zeros | 创建全零数组。 |
ones | 创建全一数组。 |
eye | 创建单位矩阵(对角线上为一,其他地方为零)。 |
rand | 创建介于 0 和 1 之间的均匀分布随机数数组。 |
randn | 创建均值为 0、方差为 1 的正态分布(高斯)随机数数组。 |
linspace | 创建两个端点之间线性间隔点的向量。 |
magic | 创建魔方矩阵(用于演示目的)。 |
示例:创建各种数组
Section titled “示例:创建各种数组”% 创建一个 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);II. 数组信息和操作
Section titled “II. 数组信息和操作”一旦数组存在,您需要查询其属性并更改其形状。
| 函数名称 | 描述 |
|---|---|
size | 以行向量形式返回数组的维度。 |
length | 返回最大维度的长度。 |
numel | 返回数组中的元素总数。 |
reshape | 更改数组的维度而不改变其数据。 |
' (apostrophe) | 执行复共轭转置。对于实数矩阵,这是简单的转置。 |
transpose | 执行非共轭转置。 |
示例:检查和重塑
Section titled “示例:检查和重塑”% 创建一个示例矩阵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 6III. 数学和统计函数
Section titled “III. 数学和统计函数”MATLAB 提供了丰富的函数库,可以一次性操作整个数组,这被称为向量化。
| 函数名称 | 描述与主要用法 |
|---|---|
sum | sum(A) 求每列的和。sum(A, 2) 求每行的和。sum(A, 'all') 求所有元素的和。 |
mean | mean(A) 查找每列的平均值。对于其他情况,请使用与 sum 类似的维度参数。 |
max | max(A) 查找每列的最大值。[M, I] = max(A) 也返回索引。 |
min | 查找最小元素,语法与 max 类似。 |
sort | sort(A) 对每列进行排序。sort(A, 'descend') 按降序排序。 |
unique | 返回数组中唯一的元素,并进行排序。 |
示例:矩阵数据分析
Section titled “示例:矩阵数据分析”% 让我们分析一个包含 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最佳实践:向量化
Section titled “最佳实践:向量化”有效 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 直接应用于整个向量