1.矩阵索引的概念

如果矩阵是一个电影院,那么矩阵索引就是每个座位的编号,每个观众都可以通过这个编号找到自己的位置,同样的,通过矩阵索引可以找到每个元素的位置。

2.矩阵索引的表达方法

例如,对于1*4的矩阵A=[5 6 7 8],A中第1行第2列的元素是6,记作:

A(1,2)

那么返回值为6;

说明,索引方式是使用小括号,把行序号和列序号分别作为第一个和第二个参数,这种索引方式称为下标索引(也叫组合索引)。

3.矩阵元素的修改

例如,对于1*4的矩阵A=[5 6 7 8],修改A中第1行第2列的元素为10,记作:

A(1,2)=10

那么返回值为:A=[5 10 7 8]。

4.线性索引

除了上面所讲的下标索引,还有另一种矩阵索引方式,称为,线性索引,同样使用小括号,把元素序号作为唯一的输入参数,这里的所说的元素序号是指,把矩阵所有元素按列优先排列成一字长蛇阵,某一元素排在第n个位置,那么序号就是n;

例如,对于1*4的矩阵A=[5 6 7 8],A中第2元素是6,记作:

A(2)

那么返回值为6;

再如,对于2*3的矩阵:

B=[5 6 7
8 9 10]

B中第2元素是8,记作:

B(2)

那么返回值为8;

(此处不明白可留言交流)

5.逻辑索引

除了上述的两种索引,还有一种矩阵索引的方式,称为,逻辑索引,同样使用小括号,把逻辑矩阵作为输入参数,这里的逻辑矩阵是指,与矩阵具有相同大小,并使用逻辑值表达的逻辑矩阵,在逻辑值为真的位置,返回矩阵的元素;

程序示例如下:


b=[1 2;3 4] %创建2*2的矩阵
c=[true false;true false]  %逻辑矩阵用true和false表示
b(c)  %逻辑索引:逻辑值为真返回对应元素,为假不返回


说明,三种矩阵索引全部说完。

6.下标索引和线性索引的转换

sub2ind
ind2sub

这两个函数用的不多,不展开说,用到时自行查找用法即可,非常简单。

7.索引中冒号的妙用

下标索引中,可以使用冒号(:)表示所有行或者所有列;

程序示例如下:


a=[1 2 3
4 5 6
7 8 9]
a(1,:)  %索引第1行所有列的元素,返回[1 2 3]
a(:,1)  %索引所有行第1列的元素,返回[1;4;7]
a(:,:)  %索引所有行所有列的元素,返回整个矩阵a


8.索引中end字符的妙用

下标索引中,可以使用‘end’表示最后一行或者最后一列;

程序示例如下:


a=[1 2 3
4 5 6
7 8 9]
a(2,end)  %索引第2行最后一列的元素,返回6
a(end,3)  %索引最后一行第3列的元素,返回9
a(end,end)  %索引最后一行最后一列的元素,返回9


9.矩阵索引综合应用实例


a=[1 2 3
4 5 6
7 8 9]
a(1,2:3)  %第1行,第2-3列,返回[2 3]
a(2,[1 3])  %第2行,第1列和第3列,返回[4 6]
a(3,2:end)  %第3行,第2到最后一列,返回[8 9]


10.超出矩阵索引报错


a=[1 2 3
4 5 6
7 8 9]
a(3,4)  %索引第3行第4列的元素

报错,提示:超出矩阵范围,这是初学者常犯之错误;从以往的Matlab编程答疑经历来看,很多同学都理不清;

这样的问题没有典型案例,因为每个同学的程序都不一样,但问题的根源是一样的,就是上述这么简单;排查纠错的关键在于:编程逻辑要清晰!


End