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

#常见矩阵元素索引方法

矩阵作为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>5
threshold =
     0     0     0
     0     0     1
     1     1     1
>> a(threshold) = 0
a =
     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) = 0
a =
     1     2     3
     4     5     0
     0     0     0

##数组索引

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

>> a = 1:6
a =
     1     2     3     4     5     6
>> a(3) = 5
a =
     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的矩阵,因此参考文献2中所谓的线性索引也不过是数组索引的一种特例。从上边的例子可以看出,单下标索引中的冒号索引可以实现多维矩阵的列向量化,这和多下标索引中的冒号索引又不尽相同。

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

>> a = [1:3;4:6;7:9]
a =
     1     2     3
     4     5     6
     7     8     9
>> a(2,2) = 0
a =
     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>5
threshold =
     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>5
threshold =
     0     0     0
     0     0     1
     1     1     1
>> a(threshold)
ans =
     7
     8
     6
     9
>> a(threshold) = 0
a =
     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) = 0
b =
     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 ↩︎

  • 9
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值