MATLAB矩阵索引用 A(行, 列) 取出或改写元素,下标从 1 开始。整行、整列、子块、按条件筛选,都建立在这套写法上。例如要取第 3 行第 4 列,或按成绩筛及格名单,都靠索引完成。

行在前,列在后

行↓ 列1 列2 列3 行1 行2 行3 1 2 3 4 5 6 7 8 9 A(2,3):第 2 行与第 3 列的交叉处 → 6
行列都从 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     6
rows = [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 20
scores = [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) 时先想清哪个是行、哪个是列。
  • 逻辑索引里,条件数组的尺寸要和被索引数组对应得上。