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()函数的主要内容,如果未能解决你的问题,请参考以下文章

matlab中的reshape命令有啥数学意义?

matlab中的reshape命令?

MATLAB reshape()函数和sub2ind()函数

Matlab 的reshape函数(转)

matlab中reshape是啥意思

重塑矩阵(matlab reshape函数原理)