MATLAB 索引和修改数组
MATLAB 索引和修改数组
小嗷犬对数组进行索引
我们可以使用行、列索引从数组中提取值,如:
1 |
|
这样 y
会得到 x
第 2
行第 2
列的值,即数值 5
,可以注意到 MATLAB 中的索引是从 1
开始的。
我们可以使用 MATLAB 关键字 end
作为行或列索引来引用最后一个元素:
1 |
|
这里 y
会得到 x
第 2
行最后一列的值,即数值 6
;z
会得到 x
最后一行第 1
列的值,即数值 7
。
end
关键字在这里数值上就等于当前维度的长度,可以参与算数运算:
1 |
|
这里 y
会得到 x
倒数第 2
行倒数第 3
列的值,即数值 4
。
如果我们在索引时只提供一个值,那它会被认为是行索引,列索引则默认是 1
:
1 |
|
这里 y
会得到 x
的第 2
行第 1
列的值,即数值 4
。
提取多个元素
用作索引时,冒号运算符:
可指代该维度中的所有元素,如:
1 |
|
这里 y
会得到 x
的第 2
行所有列的元素,即行向量 [4 5 6]
。
冒号运算符还可以引用某个值范围,如:
1 |
|
这里 y
会得到 x
的第 1
到 3
行第 2
列的元素,即列向量 [2;5;8]
。
对于行向量或者列向量,我们可以只提供一个索引值,来索引它对应的元素:
1 |
|
这里 y
会得到 x
的第 3
个元素,即数值 3
; z
会得到 x
的第 2
到 最后一个元素,即行向量 [2 3 4 5]
。
索引也可以是非连续的数字,我们可以用一个向量来存储离散的索引值:
1 |
|
这里 y
会得到 x
的第 1
和 3
行所有列的元素,即矩阵 [1 2 3;7 8 9]
。
更改数组中的值
上面两节我们已经学会了如何对指定位置进行索引,其实我们不止可以将索引出来的值赋值给变量,我们也可以对索引的位置进行修改:
1 |
|
这样 x
第 3
行的所有列都会被赋值为 0
,即 x
变为 [1 2 3;4 5 6;0 0 0]
。
也可以这样:
1 |
|
这样 x
第 3
行的值会被赋值为与第 1
列相同,即 x
变为 [1 2 3;4 5 6;1 2 3]
。
重构和排序函数
函数 | 说明 |
---|---|
reshape(x,m,n) | 将矩阵 x 重构为 m×n 的矩阵 |
reshape(x,[m,n]) | 将矩阵 x 重构为 m×n 的矩阵 |
reshape(x,[m,n,p,…]) | 将矩阵 x 重构为 m×n×p×… 的矩阵 |
sort(x) | 对向量 x 进行升序排序 |
sortrows(x) | 对矩阵 x 的行进行升序排序 |
flip(x) | 对向量 x 进行翻转 |
flip(x,dim) | 对矩阵 x 在维度 dim 上进行翻转 |
flipud(x) | 将矩阵 x 从上向下翻转 |
fliplr(x) | 将矩阵 x 从左向右翻转 |
rot90(x) | 将矩阵 x 逆时针旋转 90 度 |
transpose(x) | 对矩阵 x 进行转置 |
ctranspose(x) | 对矩阵 x 进行共轭转置 |
permute(x,order) | 置换矩阵 x 的维度 |
ipermute(x,order) | 逆置换矩阵 x 的维度 |
shiftdim(x,k) | 将矩阵 x 的维度向后移动 k 个位置 |
circshift(x,k) | 将矩阵 x 的元素向后移动 k 个位置 |
squeeze(x) | 删除矩阵 x 中长度为 1 的维度 |
索引相关函数
函数 | 说明 |
---|---|
colon(a,b) | 创建一个从 a 到 b 的等差数列 |
end | 用于索引,表示最后一个元素 |
ind2sub(siz,ndx) | 将索引 ndx 转换为子索引 |
sub2ind(siz,i,j,…) | 将子索引转换为索引 |