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 eye
,help magic
等。要查看详细文档,可以在Matlab命令行中输入doc
命令,如doc eye
,doc 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 = magi