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 12linspace 与 logspace
冒号适合指定步长。只知道要取几个点时,用 linspace:
x = linspace(0, 1, 5)
y = linspace(0, 2*pi, 100)x =
0 0.2500 0.5000 0.7500 1.0000logspace(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])移位是循环的:从一头挤出的元素绕回另一头。信号处理、图像里会用到。