在matlab中经常要用到进行矩阵的索引,其中有三种方法,分别是下标法、索引法、布尔法。
- 下标法
A(i,j):其中i和j可以是一维向量、标量、“:”号或者“end”。
以逗号为分隔,逗号前面即i表示对行的索引描述,逗号后面即j表示对列的索引描述
例如
A = magnic(3)
A =
8 1 6
3 5 7
4 9 2
%生成一个3阶魔方矩阵
%魔方矩阵是一个经典的数学问题,
%即在二维方向把一个方块等间隔的分为n个小方格,填入数字1 - n,
%使得横、竖和斜方向的所有数字之和相等。
A(2:3,3:-1:1)
%A的第2行到第三行,第三列逆序索引到第一列
%所以结果为
ans =
7 5 3
2 9 4
A(:,end)
%A所有的行,最后一列
%结果为
ans =
6
7
2
A([2 1 3 3],[1 1 2 2 1])
%得到一个4行5列的矩阵,
ans =
A(2,1) A(2,1) A(2,2), A(2,2), A(2,1)
A(1,1) A(1,1) A(1,2), A(1,2), A(1,1)
A(3,1) A(3,1) A(3,2), A(3,2), A(3,1)
A(3,1) A(3,1) A(3,2), A(3,2), A(3,1)
%所以结果为
ans =
3 3 5 5 3
8 8 1 1 8
4 4 9 9 4
4 4 9 9 4
- 索引法
A(index):index可以是任意的数组,index的元素必须是正整数,且不大于numel(A),返回的是一个尺寸与index一样的数组。
设A为一个mxn的矩阵,A(index) = A(i, j)
其中i = index/m,j=index%m(%表示取余).
A=magic(5)%括号中为索引值
A =
17 (1) 24 (6) 1 (11) 8 (16) 15 (21)
23 (2) 5 (7) 7 (12) 14 (17) 16 (22)
4 (3) 6 (8) 13 (13) 20 (18) 22 (23)
10 (4) 12 (9) 19 (14) 21 (19) 3 (24)
A(19)
ans =
21
A([1 10 5 2 2 1 3])
ans =
17 18 11 23 23 17 4
A([2 5 9;1 1 1;8 5 6])
ans =
23 11 12
17 17 17
6 11 24
- 布尔法
A(X):X是一个有0和1组成布尔型数据,且size(A)=size(X),对应位置为1则留下该数据,0则去掉,最后按A中的存储顺序,返回一个列向量
A=magic(3)%生成一个3*3的数组
A=
8 1 6
3 5 7
4 9 2
x=logical([1 1 0;0 1 1;1 0 1])%将double转化为boolean型数据
x =
1 1 0
0 1 1
1 0 1
A(x)%引用对应位置为1的数据,返回列向量
ans =
8
4
1
5
7
2
x=A>5
%是有了比较语句,返回布尔型数据,对应位置数据大于5的为1,否则为0
x =
1 0 1
0 0 1
0 1 0
A(x)%返回大于A中大于5的元素,其实该命令可以一次性执行A(A>5)或者find(A>5),前者返回具体元素,后者返回大于5的数据的索引值
ans =
8
9
6
7
A(A>5)%一次性执行上面的命令
ans =
8
9
6
7
indx=find(A>5)%查找A中对于5的元素,返回它们的索引(index)值,此时我们可以通过A(index)返回具体的元素
index =
1
6
7
8