MATLAB学习笔记之-----数组、矩阵、向量索引和逻辑索引

     一个矩阵或者数组作为另一个矩阵下标去选取相应的矩阵元素,称为数组索引。

例:

 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也是列向量中元素的位置。

你可能感兴趣的:(Matlab/Simulink)