当前位置:   article > 正文

005_index_in_Matlab中的数组索引

005_index_in_Matlab中的数组索引

Matlab中的数组索引

1. 数组相关函数

前面我们已经介绍了关于向量、数组的一些基本约定,已经涉及了一些数组创建和操作的规则。

函数作用备注
size返回数组的大小
length返回数组的最大维度
ndims返回数组的维度数
numel返回数组的元素个数
zeros创建全零数组
ones创建全一数组
rand创建随机数组
randn创建服从正态分布的随机数组
linspace创建等差数列
logspace创建等比数列

特别还有操作符:,用于生成等差数列,如1:2:10,产生行向量[1,3,5,7,9]

还有一些没有介绍的创建函数,也很常用。

函数作用备注
eye创建单位矩阵
magic创建魔方阵
true创建逻辑1
false创建逻辑0

还有几个函数,是提取部分元素或者组合元素形成新的数组。

函数作用备注
blkdiag创建对角矩阵
diag提取对角线元素
tril提取下三角矩阵
triu提取上三角矩阵
flip翻转数组
fliplr水平翻转数组
flipud垂直翻转数组
cat拼接数组
repmat复制数组
horzcat水平拼接数组
vertcat垂直拼接数组
reshape重塑数组
squeeze去除维度为1的维度
repelem重复数组元素

这里不对这些命令进行详细介绍,需要查看帮助的,请在Matlab命令行中输入help命令,如help eyehelp magic等。要查看详细文档,可以在Matlab命令行中输入doc命令,如doc eyedoc magic等。

这里对数组元素的访问,也称为数组索引,进行一个专门的介绍。

2. 为什么要用括号

很多程序员和初学者在使用Matlab时,会有一个疑问:为什么要用括号来索引数组元素,而不是用方括号?毕竟在C、Python等语言中,我们都是用方括号来索引数组元素的。所以在第一门课程里面都是按方括号来来学习的,这是第一印象。

我在仔细调研这个问题之前就形成了一个观点:那就是Matlab把数组(矩阵)假装成一个对象,这个对象自己是一个函数,索引就是这个函数的意义。

下面,请听我的狡辩。

在Matlab中,函数的调用是用括号的,如sin(x)size(A)plot(x,y)等等。这是Matlab的基本约定,括号是函数调用的标志。那么索引数组的元素呢?也是用括号,如A(1,2)A(1:3)A(1:2:end)等等。是不是很相似?

其次,等后面我会专门写一个函数的约定,里面会讲到,Matlab里面有一个数据构造叫做cell,跟别的语言的元组非常类似,实际上Matlab函数的输入参数和输出值都是cell

比如有个函数size,他可以返回数组的大小,或者返回数组的特定维的大小。

A = magic(3); % 3 x 3
sz = size(A); % [3,3]
sz1 = size(A,1); % 3

args = {A, 1};
sz2 = size(args{:}); % 3
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

我们再来看高维数组的索引,看看是不是有什么很一样的地方。

A = magic(3); % 3 x 3

A(1,2) % 索引单个元素


A(2:3,1:2) % 索引子矩阵

A([1,2], [1, 3]) % 索引特定元素
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

那么你们猜猜,是否能够采用上面的cell的方式来索引数组呢?

A = magic(3); % 3 x 3

idx = {1,2};
A(idx{:}) % 索引单个元素

idx = {2:3,1:2};
A(idx{:}) % 索引子矩阵

idx = {[1,2], [1, 3]};
A(idx{:}) % 索引特定元素
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

很可能你们会发现,这个cell的方式和数组索引的方式是一样的。

一个东西,它看起来像函数,走起来像函数,叫起来也像函数,那么它就(可能)是函数。

以上,就是我的狡辩。实际上,只要接受了这个设定,你会发现Matlab的数组索引是非常方便的,而且非常强大。

3. 索引的种类

Matlab中的数组索引可以按两种方式进行:

  1. 位置索引
  2. 逻辑索引

位置索引很简单,就是通过前面给出的cell的方式,指定数组的位置,如A(1,2)A(1:3)A(1:2:end)等等,你就想象成函数调用,按照低维至高维来制定下标范围,每个维度的下标范围必须是一个整数、整数列表、colon列表(

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/341416
推荐阅读
相关标签