MATLAB reshape()函数和sub2ind()函数
Posted ʚVVcatɞ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MATLAB reshape()函数和sub2ind()函数相关的知识,希望对你有一定的参考价值。
题目描述
已知A为4*5的矩阵
12 3 4 7 8
5 6 9 11 13
2 1 15 20 21
10 6 11 8 9
完成如下操作:将A(2,4)的11和A(3, 2)的1删除后,保持数据次序不变的情况下,重新整理成3行6列的矩阵数据。
输入
无
输出
3行6列的矩阵
提示
使用 reshape()函数,sub2ind()函数以及“利用空矩阵删除矩阵元素”
程序代码
A=[12, 3, 4, 7, 8;
5, 6, 9, 11, 13;
2, 1, 15, 20, 21;
10, 6, 11, 8, 9];
B = A(sub2ind(size(A), [1 2 3 4, 1 2 4, 1 2 3 4, 1 3 4, 1 2 3 4], [1 1 1 1, 2 2 2, 3 3 3 3, 4 4 4, 5 5 5 5 ]));
C = reshape(B, 3, 6);
disp(num2str(C));
sub2ind()函数
将下标转换为线性索引
ind = sub2ind(sz,row,col)
- 针对大小为 sz 的矩阵返回由 row 和 col 指定的行列下标的对应线性索引 ind。
- 此处,sz 是包含两个元素的向量,其中 sz(1) 指定行数,sz(2) 指定列数。
首先创建了一个矩阵A,一个4行5列的矩阵,size(A)为获得A矩阵的行数和列数,sub2ind第二和第三个参数都是用矩阵表示的,两个矩阵对应的元素代表A中某个元素的行下标和列下标。
例如:要获取 A(2,4)的11和A(3, 2)的1的行下标和列下标。
- A(2, 4):行下标为2,列下标为4的元素对应的是11,对应的索引序号为 14
- A(3, 2):行下标为3,列下标为2的元素对应的是1,对应的索引序号为 7
注:
- MATLAB是按列搜索的,先搜索第一列,然后搜索第二列…。同理A中的第2行第5个的索引号为18,后面依次类推。
- 行下标,指定为标量、向量、矩阵或多维数组。row 的大小必须与 col 的大小相同。
如何取出A中A(2, 4),A(3, 2),输入以下代码即可:
B = A(sub2ind(size(A), [2 3], [4 2]));
如果要用 sub2ind()函数删除 A(2, 4),A(3, 2)即选取出A(2, 4),A(3, 2)以外的元素,那么输入以下代码即可:
B = A(sub2ind(size(A), [1 2 3 4, 1 2 4, 1 2 3 4, 1 3 4, 1 2 3 4], [1 1 1 1, 2 2 2, 3 3 3 3, 4 4 4, 5 5 5 5 ]));
reshape()函数
如果需要改变矩阵的形状,reshape(A,m,n)表示矩阵总元素保持不变的前提下,将矩阵A重新排列为m*n的矩阵。
reshape()函数只改变矩阵的行数和列数,但并不改变原矩阵元素个数及其存储顺序。
使用reshape()函数将B转换成 3行6列的矩阵
C = reshape(B, 3, 6);
参考:https://ww2.mathworks.cn/help/matlab/ref/sub2ind.html?searchHighlight=sub2ind&s_tid=doc_srchtitle
以上是关于MATLAB reshape()函数和sub2ind()函数的主要内容,如果未能解决你的问题,请参考以下文章