本节说明 MATLAB 中对整块数组进行尺寸查询、排序、翻转、变形与等距采样的常用函数。这类函数在元素较多时通常比手写循环更简洁,也是向量化编程的基础,与矩阵运算中的汇总方向约定相呼应。

尺寸:size、length、numel、ndims

A = rand(3, 4);
size(A)    % [3 4]
length(A)  % 4,最长那一维的长度
numel(A)   % 12,元素总个数
ndims(A)   % 2

对向量,length 与 numel 通常均等于元素个数;size(v) 返回 [1 n] 或 [n 1],可区分行向量与列向量。

排序:sort、sortrows

v = [23 45 12 9 5 0 19 17];
sort(v)
sort(v, 'descend')

对矩阵,sort 默认按列各自排序;第二个参数为 2 时按行排序:

m = [2 6 4; 5 3 9; 2 0 1];
sort(m)
sort(m, 2)

若须按某一列对整行重排(例如按成绩排列学生记录),使用 sortrows:

students = [78 92; 63 70; 90 81];
sortrows(students, 2)

翻转与旋转

A = [1 2 3; 4 5 6];
fliplr(A)   % 左右翻转
flipud(A)   % 上下翻转
rot90(A)    % 逆时针旋转 90°

reshape

元素总数不变,仅改变行列排布;填充顺序为按列优先(先填满第一列,再填第二列):

A = 1:12;
B = reshape(A, 3, 4)
B =
     1     4     7    10
     2     5     8    11
     3     6     9    12

linspace 与 logspace

冒号表达式适合指定步长;若只关心区间上等分的点数,可使用 linspace:

x = linspace(0, 1, 5)
y = linspace(0, 2*pi, 100)
x =
         0    0.2500    0.5000    0.7500    1.0000

logspace(0,3,4) 在 10^0 与 10^3 之间按对数刻度取点,对数坐标绘图时常用。

circshift

a = [1 2 3; 4 5 6; 7 8 9];
circshift(a, 1)
circshift(a, [1 -1])

移位为循环:从一端移出的元素进入另一端,在信号与图像处理中偶有应用。

注意点

  • sum、mean、sort 等对二维矩阵默认沿第 1 维(列)工作;沿行运算须显式给出维度参数。
  • reshape 按列填充,与按行阅读的直觉可能不一致;不确定时可用小规模数组验证。
  • length 返回最长维的长度,不等同于行数;矩阵上宜与 size、numel 区分使用。

本节说明了尺寸与排序类函数、reshape、linspace / logspace 及 circshift 的要点。下一节介绍条件语句:if、elseif、switch 与字符串比较。