MATLAB通过索引访问数组元素
所谓索引,就是元素在数组这块内存中的顺序号,这与班级里的学号、银行的排号是一样的。
要想知道某个元素的索引,首先得知道数组元素在内存中是如何排布的。
对于一维数组,元素从前往后挨着存储即可:下标为 1 的元素放在开头,索引为 1;下标为 2 的元素紧挨着开头的元素,索引为 2;以此类推,直到存储完所有元素。
我们重点关注的是二维数组。二维数组由行和列构成,到底是一行一行地存储(按行存储),还是一列一列地存储(按列存储),不同的编程语言有不同的规定。大部分编程语言是按行存储的,比如 C/C++、Java、Python 等都是这样;但是 MATLAB 是个例外,它是按列存储的。
比如对于下面的二维数组:
下面列出了元素、索引和下标的对应关系:
对于三维数组也是类似的,先列后行再页。
通过索引访问数组元素的格式如下:
当然,下标也可以放在向量中,格式如下:
如果你希望得到的元素以二维数组的形式展现,可以使用类似下面的格式:
【实例】MATLAB 通过索引访问数组元素:
ind2sub() 用来将索引转换成下标,它的用法为:
sub2ind() 用来将下标转换成索引,它的用法为:
请看下面的演示代码:
			
			
要想知道某个元素的索引,首先得知道数组元素在内存中是如何排布的。
对于一维数组,元素从前往后挨着存储即可:下标为 1 的元素放在开头,索引为 1;下标为 2 的元素紧挨着开头的元素,索引为 2;以此类推,直到存储完所有元素。
我们重点关注的是二维数组。二维数组由行和列构成,到底是一行一行地存储(按行存储),还是一列一列地存储(按列存储),不同的编程语言有不同的规定。大部分编程语言是按行存储的,比如 C/C++、Java、Python 等都是这样;但是 MATLAB 是个例外,它是按列存储的。
比如对于下面的二维数组:
A=
    8    1    6
    3    5    7
    4    9    2
元素在 MATLAB 中的存储顺序是 8,3,4, 1,5,9, 6,7,2;也就是说,先存储第1列,再存储第2列,最后存储第3列。下面列出了元素、索引和下标的对应关系:
元素 索引 下标 8 1 (1,1) 3 2 (2,1) 4 3 (3,1) 1 4 (1,2) 5 5 (2,2) 9 6 (3,2) 6 7 (1,3) 7 8 (2,3) 2 9 (3,3)
对于三维数组也是类似的,先列后行再页。
通过索引访问数组元素
一维数组的下标和索引相同,大家很容易理解,高维数组(三维以上的数组)和二维数组在原理上是类似的,所以本节重点关注二维数组。通过索引访问数组元素的格式如下:
A(index)
A 是数组名,它可以是一维数组、二维数组或者高维数组。index 是索引,它是一个整数,取值范围是 0 ≤ index ≤ numel(A);numel() 函数用来求数组元素的个数。当然,下标也可以放在向量中,格式如下:
	A([i  j  k  ...])
	A([i, j, k ...])
,分隔。这种格式会将得到的元素以行向量的形式返回。如果你希望得到的元素以二维数组的形式展现,可以使用类似下面的格式:
	A([i j k; o p q; x y z])
	A([i,j,k; o,p,q; x,y,z])
【实例】MATLAB 通过索引访问数组元素:
>>A=magic(5)
%括号中为索引值,是我自己添加的
A =
    17 (1)     24 (6)     1 (11)     8 (16)    15 (21)
    23 (2)      5 (7)     7 (12)    14 (17)    16 (22)
     4 (3)      6 (8)    13 (13)    20 (18)    22 (23)
    10 (4)     12 (9)    19 (14)    21 (19)     3 (24)
    11 (5)    18 (10)    25 (15)     2 (20)     9 (25)
>>A(8)
ans = 6
>>A([1 10 5 2 2 1 3])
ans =
    17    18    11    23    23    17     4
>>A([2 5 9; 1 1 1; 8 5 6])
ans =
    23    11    12
    17    17    17
     6    11    24
索引和下标的转换
MATLAB 提供了 ind2sub() 和 sub2ind() 函数用来对索引和下标进行转换。ind2sub() 用来将索引转换成下标,它的用法为:
[i, j] = ind2sub(siz, index)
对参数和返回值的说明:- siz 表示数组尺寸,也就是数组的行数和列数。对于一维数组来说,数组的行数为 1,列数等于数组元素的个数(可以通过 numel(A) 求得)。通过 size() 函数可以获得数组尺寸,也可以手动输入数组尺寸。
- index 表示索引。
- [i, j] 表示转换得到的下标。
sub2ind() 用来将下标转换成索引,它的用法为:
index = sub2ind(siz, i, j)
其中,siz 表示数组尺寸,i 表示行下标,j 表示列下标,index 表示索引。请看下面的演示代码:
>> A=magic(5)
A =
    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9
>> [i, j] = ind2sub(size(A), 12)  %通过size()函数求得数组尺寸
i = 2
j = 3
>> index = sub2ind([5,5], 2, 3)  %手动输入数组尺寸
index = 12
>> A(2,3)  %通过下标访问数组元素
ans = 7
>> A(12)  %通过索引访问数组元素
ans = 7
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算
