一个矩阵或者数组作为另一个矩阵下标去选取相应的矩阵元素,称为数组索引。
例:
x=10:10:50;
y=[5 4 1 2 3];
z=x(y)
z=
50 40 10 20 30
逻辑索引则是使用0和1 构成的矩阵从其他矩阵中提取所需元素,这时逻辑矩阵必须和要索引的矩阵大小一样
例
x=10:10:50;
y=logical([0 1 1 1 0]);
z=x(y)
z=
20 30 40
两种索引法都允许对矩阵整体操作,不必使用循环,简化了代码,也使代码运行速度更快.逻辑索引的速度要快于数组索引。
若上述例子中x、y都为矩阵,则等价于先将他们转换成列向量。z=x(y)等价于 A=x(:); B=y(:); z=A(B);
关系运算符、find 和索引
关系运算符的计算结果可以为逻辑值。
>> a=rand(3,3)
a =
0.8147 0.9134 0.2785
0.9058 0.6324 0.5469
0.1270 0.0975 0.9575
>> x=a>0.5
x =
1 1 0
1 1 1
0 0 1
为了获得a中大于0.5的的元素,利用逻辑索引可以简单写成:
>>y=a(a>0.5)
y =
0.8147
0.9058
0.9134
0.6324
0.5469
0.9575
内置函数find 的输入为逻辑矩阵表达式,返回满足条件的元素的对应的小标组成的向量。
>> a=rand(3,3)
a =
0.8147 0.9134 0.2785
0.9058 0.6324 0.5469
0.1270 0.0975 0.9575
>> a>0.5
ans =
1 1 0
1 1 1
0 0 1
>>y=find(a>0.5)
y =
1
2
4
5
8
9
所以,a(find(a>0.5))等价于a(a>0.5)
----------------------------------------------------------
综上所述,可以看不出,在对矩阵的操作中,本质上是将矩阵按照列的方式排列成一个长长的列向量,再进一步对此列向量进行相关的索引操作。得到的元素位置index也是列向量中元素的位置。