MATLAB中的矩阵的重构和重新排列

师从清风

矩阵的重构和重新排列


reshape函数


reshape函数可以改变矩阵的形状,其常用语法为reshape(A,m,n)或者reshape(A,[m,n]),这可以将矩阵A的形状更改为m行n列,前提是转化前后的两个矩阵的元素总数要相同。例如有一个矩阵A,它原来的大小是2行6列,我们需要将其形状变成3行4列,那么,我们可以使用命令:reshape(A, 3, 4).  (A和B中的元素个数是相同的)

从上面的运行结果可以看出,reshape函数实际上是按矩阵的线性索引来重新组织矩阵元素的。也就是说,它先取矩阵A的第一列,然后是第二列,依此类推,再按新的维度重新组织这些元素。因此,转换后的B矩阵中的元素和A矩阵中的元素是完全相同的,即A(:)和B(:)的结果完全相同。

若A是一个由12个元素组成的矩阵,命令reshape(A,3,[ ])、reshape(A,[ ],4)可以实reshape(A,3,4)一样的效果。
如果你给出的转换后的行数和列数的乘积不等于原始矩阵中元素的个数,那么MATLAB就会报错:

sort函数


sort函数用来对向量或者矩阵进行排序。如果是矩阵的话,可以对矩阵的每一行或每一列分别进行排序。
第一:对向量v排序
sort(v) 可以将向量v按照从小到大的顺序进行升序排列
sort(v,'descend')可以将向量v按照从大到小的顺序进行降序排列

注意,上面的用法我们只使用了sort函数的一个返回值,即排序后的向量;
事实上,sort函数可以有两个返回值,基本用法为:[sort_v , ind] = sort(v)
这里,sort_v是排序后的向量,ind是排序后的向量中的每个元素在v向量中的索引。

在上面的例子中,我们让sort函数返回了两个变量;sort_v和ind。它们是两个长度相等的向量,向量的方向和sort函数中输入的v向量的方向一致,都是行向量。向量v中所有元素的最小值为8,而8在v中的索引是4,因此sort_v中第一个元素为8,ind的第一个元素为4; 向量v中第二小的值为10,而10是v中的第1个元素,因此sort_v中第二个元素为10,ind的第二个元素为1;依次类推,可以得到sort_v和ind向量的值。事实上,这里有一个恒等关系成立:v(ind)运行的结果和sort_v的结果全一样,大家可以自行验证。

下面具体的应用场景

假设清风班上有10名同学,序号分别是1号、2号一直到10号。已知这10名同学的成绩构成的向量为:[84 70 61 90 69 78 88 74 92 76],问:清风班上哪三名同学的分数最高,分数分别是多少?

根据MATLAB返回的结果可以看出:9号、4号和7号这三名同学的分数排名前三,分别是92、90和88分。

引申一个问题:我们能不能知道这10名同学在班上的排名?


 

对矩阵A排序


使用方法:sort(A,dim)
dim = 1时,沿着行方向(从上至下)对矩阵的每一列按照从小到大的顺序分别进行排序
dim = 2时,沿着列方向(从左至右)对矩阵的每一行按照从小到大的顺序分别进行排序


   注意:(1)当dim=1时,sort(A,1)可以直接写成sort(A);

(2)默认是升序排列的,我们可以在最后面加一个输入参数'descend',变成从大到小的降序排列;

(3)可以有两个返回值,代表的含义和对向量排序类似,表示排序后的元素在原矩阵所在行或所在列中的索引。

sort(A,2)  % dim = 2时,沿着列方向(从左至右)对矩阵的每一行按照从小到大的顺序分别进行排序
sort(A,'descend')  % 更改为降序排列
[sort_A , ind] = sort(A)
但这时候的A(ind)就不等于sort_A啦

sortrows函数

sortrows函数可以基于矩阵的某一列对矩阵进行排序。这个函数的用法较多,我们这里直接以一个具体的实例来讲解它的用法。
假设清风老师有6名学生,每一行代表一名学生。这六名同学的四门科目的成绩对应着四列,例如第一名同学的第一科成绩为95,第二科成绩为80,依次类推。
score = [95    80    85    79   
         95    67    78    90    
         95    67    78    75   
         95    67    64    73   
         86    85    82    84    
         86    87    84    88];
请解决下面的问题:
(1)请基于第一科的成绩按升序对这六名同学进行排序。当第一科成绩相同时,基于第二科成绩升序排列。如果第二科成绩还相同,就基于第三科成绩进行排序,依次类推。
sort_score1 = sortrows(score)
(2)请基于第一科的成绩按升序对这六名同学进行排序。当第一科成绩相同时,请保持其在矩阵中出现的先后顺序。
sort_score2 = sortrows(score,1)
(3)请基于第二科的成绩按升序对这六名同学进行排序。当第二科成绩相同时,请保持其在矩阵中出现的先后顺序。
sort_score3 = sortrows(score,2)
(4)请基于第一科的成绩按升序对这六名同学进行排序。当第一科成绩相同时,基于第三科成绩升序排列。如果第一科和第三科都相同,就保持在矩阵中出现的先后顺序。
sort_score4 = sortrows(score,[1,3])
事实上,sortrows(score)等价于sortrows(score, 1:size(score,2)),即sortrows(score, [1,2,3,4])

(5)请基于第一科的成绩对这六名同学进行降序排列。当第一科成绩相同时,基于第三科成绩降序排列。如果第一科和第三科都相同,就保持在矩阵中出现的先后顺序。
sort_score5 = sortrows(score,[1,3],'descend')
(6)请基于第一科的成绩对这六名同学进行降序排列。当第一科成绩相同时,基于第三科成绩升序排列。如果第一科和第三科都相同,就保持在矩阵中出现的先后顺序。
sort_score6 = sortrows(score,[1,3],{'descend','ascend'})
(7)请基于第一科的成绩按升序对这六名同学进行排序。当第一科成绩相同时,请保持其在矩阵中出现的先后顺序,并返回索引值。
score
[sort_score7 , ind7] = sortrows(score,1)
注意:score(ind7,:)得到的结果和sort_score7的结果完全一样。
score(ind7,:)

通过上面的例子可以看出,sortrows函数和sort函数的最大区别在于:
sort函数会对矩阵的每一列分别进行排序;
sortrows函数是基于某一列进行排序的,排序后得到的新矩阵的同一行元素不会改变。
score
sort(score)
sortrows(score)
在实际的应用场景中,sort函数一般只用于对向量进行排序;如果是矩阵或者表格排序,我们一般使用sortrows函数,例如Excel中对表格的排序就和sortrows函数类似。在以后的章节中,我们会专门讲到MATLAB中的表格数据,到时候还会用的这个函数。

(4)flip / fliplr / flipud函数
这三个函数用于对矩阵进行翻转
flip:翻转元素的顺序; fliplr:将数组从左向右翻转 ;flipud:将数组从上向下翻转
后面两个函数是flip函数的特例。

用法1: flip(A)
如果 A 为向量,flip(A) 将沿向量的长度方向翻转元素顺序。
如果 A 为矩阵,flip(A) 将反转每列元素的顺序。
A = [5 2 7 8 9];  % 行向量
flip(A)
等价于  A(end:-1:1)
A(end:-1:1)
B = [5;2;7;8;9];  % 列向量
flip(B)
C = [5 8 7;
     4 2 6; 
     3 5 8;
     6 4 1];
flip(C)
用法2: flip(A,dim)
flip(A,dim) 沿维度 dim 翻转 A 中元素的顺序。
如果 A 为矩阵,flip(A,1) 将沿着行方向对矩阵A上下翻转,
                          flip(A,2) 将沿着列方向对矩阵A左右翻转。
C = [5 8 7;
     4 2 6; 
     3 5 8;
     6 4 1];
flip(C,1)   % 等价于flip(C) 或者  flipud(C)
flipud(C)
 flip(C,2)   %  fliplr(C)
 fliplr(C)

A = 1:5
flip(A)
flip(A,1)

(5)rot90函数  
C = [5 8 7; 4 2 6; 3 5 8; 6 4 1]
rot90(C)  % 逆时针方向旋转90度
rot90(C,2)  % 逆时针方向旋转90*2=180度
rot90(C,3)  % 逆时针方向旋转90*3=270度

rot90(C,-1)  % 逆时针旋转-90度;等价于顺时针旋转90度

若有侵权,请联系作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/739702.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

字节跳动也启动春季校园招聘了(含二面算法原题)

字节跳动 - 春招启动 随着各个大厂陆续打响春招的响头炮,字节跳动也官宣了春季校园招聘的正式开始。 还是那句话:连互联网大厂启动校招计划尚且争先恐后,你还有什么理由不马上行动?! 先来扫一眼「春招流程」和「面向群…

掌握Redis,看完这篇文章就够了

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Redis是什么?二、Redis安装三、Redis相关数据类型 四、基础操作(使用了python连接redis)1.字符串2.键对应操作3.哈希&am…

2024.3.12

1. 要求:自己封装一个矩形类(Rect),拥有私有属性:宽度(width)、高度(height), 定义公有成员函数: 初始化函数:void init(int w, int h) 更改宽度的函数:set_w(int w) 更改高度的函数:set_h(int h) 输出该矩形的周长和面积函数:void sho…

[Unity3D]--更换天空盒子

我们原来的天空盒子是这样的。 感觉不是特别满意,想换一个更好看的。 去资源商店找个好看的 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 例如这个 然后在Window>Rendering>Lighting里的环境选项里更换材质 更换: ​ …

考察1学生学籍系统winform .net6 sqlserver

考察1学生学籍系统winform .net6 sqlserver 下载地址: 考察1学生学籍系统winform .net6 sqlserver winform(.net6)sqlserver数据库 只有数据库的表结构需要自己建表 启动程序 登录失败 进入主界面 项目获取: 项目获取:typora: typora/img (gitee.com…

【C语言程序设计】C语言求圆周率π(三种方法)

题目一&#xff1a; 利用公式①计求π的近似值&#xff0c;要求累加到最后一项小于10^(-6)为止。 程序代码&#xff1a; #include <stdio.h> #include <stdlib.h> #include <math.h> int main(){float s1;float pi0;float i1.0;float n1.0;while(fabs(i)&…

Java中的参数传递

程序设计语言将实参传递给方法&#xff08;或函数&#xff09;的方式分为两种&#xff1a; 值传递&#xff1a;方法接收的是实参值的拷贝&#xff0c;会创建副本。引用传递&#xff1a;方法接收的直接是实参所引用的对象在堆中的地址&#xff0c;不会创建副本&#xff0c;对形…

小家电显示驱动芯片SM1616特点与相关型号推荐

电饭煲、电磁炉、空调和机顶盒等等小家电通常需要使用显示驱动芯片来控制和驱动显示屏。这些显示驱动芯片的主要功能是将处理器的信号转换成显示屏能够理解的信号&#xff0c;从而显示出相应的文字和图像。 具体来说&#xff0c;电饭煲、电磁炉、空调等家等小家电通常会有一个或…

C语言 —— 图形打印

题目1&#xff1a; 思路&#xff1a; 如果我们要打印一个实心正方形&#xff0c;其实就是一个二维数组&#xff0c;i控制行&#xff0c;j控制列&#xff0c;行列不需要控制&#xff0c;arr[i][j]直接打印星号即可。 对于空心正方形&#xff0c;我们只需要控制行和列的条件&…

Igraph入门指南 6

3、make_系列&#xff1a;igraph的建图工具 按照定义&#xff0c;正则图是指各顶点的度均相同的无向简单图&#xff0c;因为我目前没有找到描述度相等的有向&#xff08;或自环图&#xff09;的标准名称&#xff0c;所以在本文中借用一下这个概念&#xff0c;并加上定语有向无…

3.1_3 连续分配管理方式

3.1_3 连续分配管理方式 连续分配&#xff1a;指为用户进程分配的必须是一个连续的内存空间。 &#xff08;一&#xff09;单一连续分配 在单一连续分配方式中&#xff0c;内存被分为系统区和用户区。 系统区通常位于内存的低地址部分&#xff0c;用于存放操作系统相关数据&am…

原生高性能抓包工具Proxyman,送给爱学习的你

现在的抓包工具可谓是五花八门&#xff0c;比如Fiddler&#xff0c;Charles&#xff0c;LightProxy等&#xff0c;各有各的优缺点&#xff0c;最近又看到一个新的抓包工具&#xff0c;像我这样一个有强烈好奇心的人&#xff0c;怎么能错过&#xff0c;我们一起来学习下吧&#…

Python 导入Excel三维坐标数据 生成三维曲面地形图(面) 4-2、线条平滑曲面(原始颜色)但不去除无效点

环境和包: 环境 python:python-3.12.0-amd64包: matplotlib 3.8.2 pandas 2.1.4 openpyxl 3.1.2 scipy 1.12.0 代码: import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from scipy.interpolate import griddata fro…

3.8_理解代码(3)

fliplr函数 其中fliplr函数为flip array left to right&#xff0c;此处fliplr(i)的输出结果为[4 3 2 1] 我的代码实验 area1 fill(i,u_up(i),cyan,FaceAlpha,0.3);把我都弄得无语了&#xff0c;就实现fill怎么这么难 真是不知道向量长度哪里不同&#xff0c;知道了哈哈 终于…

[Java安全入门]三.CC1链

1.前言 Apache Commons Collections是一个扩展了Java标准库里的Collection结构的第三方基础库&#xff0c;它提供了很多强大的数据结构类型和实现了各种集合工具类。Commons Collections触发反序列化漏洞构造的链叫做cc链&#xff0c;构造方式多种&#xff0c;这里先学习cc1链…

知识文档管理系统平台:企业管理的王炸

无论是企业内部的文件共享&#xff0c;还是团队之间的协作编辑&#xff0c;知识文档管理系统都能发挥巨大的作用。它帮助企业整理、存储和查找各种文档资料&#xff0c;这不仅能提高企业的工作效率&#xff0c;还能增强企业的竞争力。今天就跟着LookLook同学一起来深入了解知识…

仿牛客项目Day6:账号设置——检查登录状态

账号设置 这个功能主要就是上传头像 在账户设置页可以点击上传头像&#xff0c;然后在首页可以改变头像&#xff08;获取头像&#xff09; 访问账号设置页面 controller getSettingPage的方法就是返回html页面 前端 改一下setting页面&#xff0c;index账号设置的url就可…

ARMv8架构特殊寄存器介绍-1

1&#xff0c;ELR寄存器&#xff08;Exception Link Register &#xff09; The Exception Link Register holds the exception return address。 异常链接寄存器保存异常返回地址。最常用也很重要。 2&#xff0c;SPSR&#xff08;Saved Process Status Register&#xff09;…

TypeScript 哲学 - Generic 和 ts表示构造函数

ts中 类的二义性 &#xff1a;做类型 和作为构造函数

基于PHP的店家服务与管理交互平台

目 录 摘 要 I Abstract II 引 言 1 1相关技术 3 1.1 PHP 3 1.2 ThinkPHP框架 3 1.2.1 Struts结构 3 1.2.2 MVC 3 1.2 Tomcat服务器 3 1.3 MySQL数据库 3 1.4 LayUI框架 4 1.5 ECharts 4 1.6 本章小结 4 2 系统分析 5 2.1 功能需求 5 2.2 用例分析 6 2.3 非功能需求 8 2.4 本章…