问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

MATLAB数组索引详解:从基础到高阶用法

创作时间:
作者:
@小白创作中心

MATLAB数组索引详解:从基础到高阶用法

引用
CSDN
1.
https://blog.csdn.net/m0_71131883/article/details/145036528

MATLAB数组索引是掌握该软件进行高效编程的关键技能之一。本文将详细介绍MATLAB数组的多种索引方式,包括位置索引、逻辑索引、线性索引以及混合索引,并通过具体示例帮助读者理解这些概念。

一、各维度的位置索引

这是最常见的方法,显式地指定元素在数组中的位置,每个维度都指定了位置标号。比如:

A(3,4)  % 第3行第4列的一个数
A(1:5,2:4)  % 1~5行、2~4行组成的子矩阵  

一般来看,每个维度处的索引由一个正整数向量给出。比如

A([2,8,3],[5,1,4])  

其中行索引和列索引分别是向量[2,8,3]、[5,1,4]。这表示取出A的第2,8,3行和5,1,4列的交点元素。请注意,新矩阵的行从上往下是A的第2,8,3行,而不是按2,3,8的递增顺序来,列同理。

那么可不可以用矩阵表示各维度的索引放在括号里呢?可以是可以,但没有更多的意义。比如

A1 = A([2,5;6,7] , [4,2;1,3])  

MATLAB会把输入的索引矩阵拉成列向量,再按之前的标准来。拉成列向量是把每一列拿出来依次往下串联,[2,5;6,7]会变成[2;6;5;7]。所以上式等价于

A2 = A([2;6;5;7] , [4;1;2;3])
% 或者
A3 = A([2,6,5,7] , [4,1,2,3])  

可以用isequal函数检查两个数组是否完全相同 :

二、各维度的逻辑索引

逻辑索引是逻辑值(假false:0,真true:1)组成的向量,数据类型是logical(如上一幅图的蓝色字体所示)。0表示不取出这个位置,1表示取出这个位置。所以索引向量有个重要的限制,必须与数组的尺寸相匹配,比如

i = logical([1,0,1,0,1,0,1,0]);
j = logical([0,1,0,1,0]);
A(i , j)  % 数目匹配了
i = logical([1,0,1,0]);
j = logical([0,1,0,1,0,1,0,1,0]);
A(i , j)  % 索引数目不是8和5,不匹配  

后者的逻辑向量的长度不是8,5,那人家怎么知道该取哪行该取哪列呢?所以会报错哦。而且还要注意,直接写0,1矩阵放进括号里会报错,因为默认数据类型是double,不是逻辑值,需要先转换类型!

逻辑索引还有个特点:取出的行和列肯定是按原矩阵的行列顺序的。

同样,索引向量如果换为矩阵输入,则会拉成向量进行处理。不再赘述。

三、线性索引

只使用单个索引,而不管数组的大小或维度如何。这种方法称为线性索引。虽然 MATLAB 根据定义的大小和形状显示数组,但实际上数组在内存中都存储为单列元素。顺序是按列排布(从上到下,从左到右),这就是之前提到的把矩阵拉成向量的默认方法。

1. 线性位置索引

A(7)  % 按线性顺序第7个元素  

接下来就有意思了,如果索引改为矩阵,不会像前两章那样把索引矩阵拉成向量,而是按照索引矩阵的尺寸构造新矩阵。

注意,3:5首先生成了[3,4,5]这一行向量。

所以,只要用一个维度的索引(总维度索引),就可用索引矩阵的尺寸表示新矩阵的尺寸。

2. 线性逻辑索引

逻辑索引也有相似的原理,这里要求索引矩阵的元素数等于A矩阵元素数。但要注意,不能像线性位置索引那样用索引矩阵的尺寸表示新矩阵的尺寸,而是保持第二章的性质把矩阵拉成列向量。所以只要是具有40个元素(8×5)的逻辑索引矩阵,生成的新矩阵总是一个列向量,包含了索引为1的那些原矩阵的元素。唯一的例外就是输入一个1*40的逻辑行向量,此时得到的矩阵是一个行向量。

假设有一个逻辑列向量ii和其改变形状后的矩阵ii2d

其中1的个数为

为节约空间,我们接下来查看一些生成的矩阵的尺寸信息

四、混合索引

可以结合使用位置索引和逻辑索引来访问数组元素。当然这种情况只能发生在对各维度都有索引时。

i = [2,7,4];
j = logical([0,1,1,1,0]);
A(i, j)  

五、总结

六、常用索引表示法

A(3,4)  % 取第3行第4列的一个元素
A(3,:)  % 取第3行
A(:,4)  % 取第4列
A(1:4,2:5)  % 取某个子数组
A(:)  % 把数组拉成一个列向量
A(6:end)  % 线性索引第6到最后的元素组成的行向量
A(3:end,2:end)  % 取右下角某个子数组
A( A<10 )  % A<10返回与A同尺寸的逻辑数组(8*5),最后得到一个列向量  
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号