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

该篇博客介绍了如何在MATLAB中通过sub2ind()和reshape()函数删除指定元素并重新整理矩阵。具体操作包括从一个4*5的矩阵A中移除A(2,4)的11和A(3,2)的1,然后将剩余元素保持次序不变地重塑为3行6列的新矩阵C,并展示了相应的代码实现。
摘要由CSDN通过智能技术生成
题目描述

已知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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值