MATLAB矩阵索引用 A(行, 列) 取出或改写元素,下标从 1 开始。整行、整列、子块、按条件筛选,都建立在这套写法上。例如要取第 3 行第 4 列,或按成绩筛及格名单,都靠索引完成。
行在前,列在后
行列都从 1 开始编号:A(2,3) 先找第 2 行、再找第 3 列。A(2,:) 取整行,A(:,3) 取整列。
A = [1 2 3; 4 5 6; 7 8 9];
A(2, 3) % 第 2 行第 3 列 → 6冒号 : 表示该方向全部下标:
A(2, :) % 第 2 行 → 4 5 6
A(:, 3) % 第 3 列 → 3; 6; 9取子块
A(1:2, 2:3) % 第 1~2 行,第 2~3 列ans =
2 3
5 6rows = [1 3];
A(rows, :) % 第 1 行与第 3 行对角线:diag
D = diag([10 20 30]) % 向量 → 对角矩阵
d = diag(A) % 矩阵 → 取出对角线d =
1
5
9给向量时生成对角阵,给矩阵时抽出对角线,同一函数两个方向。
逻辑索引
条件表达式会生成逻辑数组,可以直接当下标用:
v = [5 12 3 8 20];
v(v > 8) % 12 20scores = [62 88 45 91 70];
passed = scores(scores >= 60)v > 8 先得到一串 0/1,再按真值位置取出元素。筛选数据时很常用,往往能少写一层循环。
用索引赋值
A = magic(4);
A(2, 3) = 100;
A(:, 1) = 0;
A(A > 10) = -1;最后一行按条件批量改值:所有大于 10 的位置写成 -1。
常见误区
- 下标从 1 起,不是从 0 起。
- 写
A(i,j)时先想清哪个是行、哪个是列。 - 逻辑索引里,条件数组的尺寸要和被索引数组对应得上。