MATLAB中的逻辑索引与数组索引

来源:互联网 发布:长期招异地淘宝客服 编辑:程序博客网 时间:2024/05/22 19:44

常见矩阵元素索引方法

矩阵作为MATLAB中的基本单位,灵活地实现对其元素的索引是有效处理矩阵的必要基础。显然地,MATLAB也的确提供了很多的矩阵元素索引方法12。常见的矩阵元素索引方法分别如下所示:

逻辑索引

逻辑索引通过使用元素为0或1的逻辑矩阵来索引矩阵a中的元素,因此它们的维数必须相同。具体例子如下:

>> a = [1:3;4:6;7:9]a =     1     2     3     4     5     6     7     8     9>> threshold = a>5threshold =     0     0     0     0     0     1     1     1     1>> a(threshold) = 0a =     1     2     3     4     5     0     0     0     0

也可以直接写成如下形式:

>> a = [1:3;4:6;7:9]a =     1     2     3     4     5     6     7     8     9>> a(a>5) = 0a =     1     2     3     4     5     0     0     0     0

数组索引

根据参考书籍3中分类,数组索引可以划分为:单下标索引和多下标索引。单下标索引的具体例子如下:

>> a = 1:6a =     1     2     3     4     5     6>> a(3) = 5a =     1     2     5     4     5     6>> a([2,4])=[4,2]a =     1     4     5     2     5     6>> b = [1:3;4:6;7:9]b =     1     2     3     4     5     6     7     8     9>> b(:)ans =     1     4     7     2     5     8     3     6     9

MATLAB中,单个数值可以理解为一个元素的1×1的矩阵,因此参考文献4中所谓的线性索引也不过是数组索引的一种特例。从上边的例子可以看出,单下标索引中的冒号索引可以实现多维矩阵的列向量化,这和多下标索引中的冒号索引又不尽相同。

多下标索引的例子具体如下:

>> a = [1:3;4:6;7:9]a =     1     2     3     4     5     6     7     8     9>> a(2,2) = 0a =     1     2     3     4     0     6     7     8     9>> a([1 3],[2 3])ans =     2     3     8     9>> a(:,1)ans =     1     4     7>> a(:,[1,3])ans =     1     3     4     6     7     9>> a(1,:)ans =     1     2     3>> a([1,3],:)ans =     1     2     3     7     8     9

从上边的例子可以看出,单下标索引和多下标索引的冒号索引的作用是不尽相同的。

综上所述,MATLAB中矩阵元素的索引方法分为两种:逻辑索引和数组索引。其中,数组索引又可以分为单下标索引和多下标索引,冒号索引在不同情况下表示的含义亦不尽相同。

两者的区别和联系

逻辑索引要求索引矩阵必须和矩阵a的维数相同,而数组索引则没有这样的要求。但是数组索引中的单下标索引,又具有一些和逻辑索引的相同之处,通过下边的例子来说明:

>> a = [1:3;4:6;7:9]a =     1     2     3     4     5     6     7     8     9>> threshold = a>5threshold =     0     0     0     0     0     1     1     1     1>> a(threshold)ans =     7     8     6     9>> b = [1:3;4:6;7:9]b =     1     2     3     4     5     6     7     8     9>> b(4)ans =     2>> b([5 7])ans =     5     3

从上边的例子可以看出,当对多维矩阵进行单下标索引时,会首先将矩阵b进行列向量化,然后再按顺序选出其对应的元素。而逻辑索引也是默认进行列向量化后再按顺序选出其对应的元素。

find函数本质是数组索引

通过逻辑索引和数组索引的区别和联系,我们将很容易得出find函数本质是数组索引的结论,具体通过下边的例子进行说明:

>> a = [1:3;4:6;7:9]a =     1     2     3     4     5     6     7     8     9>> threshold = a>5threshold =     0     0     0     0     0     1     1     1     1>> a(threshold)ans =     7     8     6     9>> a(threshold) = 0a =     1     2     3     4     5     0     0     0     0>> b = [1:3;4:6;7:9]b =     1     2     3     4     5     6     7     8     9>> index = find(b>5)index =     3     6     8     9>> b(index) = 0b =     1     2     3     4     5     0     0     0     0

从上边的例子可以明显地看出,矩阵threshold是和矩阵a维数相同的逻辑矩阵,而矩阵index只是记录了矩阵b列向量化后大于5的元素的索引,且和矩阵b的维数并不相同。

参考文献


  1. matlab数组索引和逻辑索引 ↩
  2. matlab随手记 ↩
  3. 张志涌, 杨祖樱. MATLAB教程(R2006a-R2007a)[M]. 北京:北京航空航天大学出版社, 2006. 8 ↩
  4. matlab随手记 ↩
0 0
原创粉丝点击