赞
踩
前面我们已经介绍了关于向量、数组的一些基本约定,已经涉及了一些数组创建和操作的规则。
函数 | 作用 | 备注 |
---|---|---|
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 eye
,help magic
等。要查看详细文档,可以在Matlab命令行中输入doc
命令,如doc eye
,doc magic
等。
这里对数组元素的访问,也称为数组索引,进行一个专门的介绍。
很多程序员和初学者在使用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
我们再来看高维数组的索引,看看是不是有什么很一样的地方。
A = magic(3); % 3 x 3
A(1,2) % 索引单个元素
A(2:3,1:2) % 索引子矩阵
A([1,2], [1, 3]) % 索引特定元素
那么你们猜猜,是否能够采用上面的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{:}) % 索引特定元素
很可能你们会发现,这个cell
的方式和数组索引的方式是一样的。
一个东西,它看起来像函数,走起来像函数,叫起来也像函数,那么它就(可能)是函数。
以上,就是我的狡辩。实际上,只要接受了这个设定,你会发现Matlab的数组索引是非常方便的,而且非常强大。
Matlab中的数组索引可以按两种方式进行:
位置索引很简单,就是通过前面给出的cell
的方式,指定数组的位置,如A(1,2)
,A(1:3)
,A(1:2:end)
等等,你就想象成函数调用,按照低维至高维来制定下标范围,每个维度的下标范围必须是一个整数、整数列表、colon列表(
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。