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.mfbz.cn/a/451818.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JDBC连接Mysql(executeQuely)3/13

resultset-->executeQuery import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement;public class Demo3 {public static void main(String[] args) throws Exception {//1.注册驱动Class.forName("com.mys…

【图论】树上启发式合并

本篇博客参考: Oi Wiki 树上启发式合并算法学习笔记(86): 树上启发式合并 文章目录 基本概念代码实现 基本概念 首先,什么是 启发式合并 ? 有人将其称为“优雅的暴力”,启发式合并就是在合并两个部分的时候,将内容少…

如何配置IDEA中的JavaWeb环境(2023最新版)

创建项目 中文版:【文件】-【新建】-【项目】 点击【新建项目】,改好【名称】点击【创建】 右键自己建立的项目-【添加框架支持】(英文版是Add Framework Support...) 勾选【Web应用程序】-【确定】 配置tomcat 点击编辑配置 点…

【图文详解】Maven Helper插件解决Maven冲突

文章目录 插件问题解决过程 在面试中解决问题的能力和思路是考察的重点,面试官问会问我们有没有解决过maven冲突。以下造了一个maven冲突,手把手教学如何解决Maven冲突。 插件 插件在idea插件中搜索Maven Helper 问题 解决过程 根据上面日志知道是log…

清理磁盘空间 - Win系统

清理磁盘空间 - Win系统 前言系统方案TreeSize FreeSpaceSniffer 前言 我们在使用电脑时经常会出现硬盘空间不足的情况,下文介绍如何清理磁盘空间,包含系统方案、TreeSize Free和SpaceSniffer。清理Window更新等系统文件推荐使用系统方案,清…

在没有推出硬盘的情况下,重启mac电脑,外接移动硬盘无法加载显示?

一、mac磁盘工具显示未装载 1.打开终端,输入 diskutil list查看当前硬盘列表,大多数时候,可以解决。 二、使用命令行装载硬盘 执行上面命令后,仍不起作用,则手动挂载,在命令行输入如下内容: …

TSINGSEE青犀煤矿矿井视频监控与汇聚融合管理视频监管平台建设方案

一、背景需求 随着我国经济的飞速发展,煤炭作为我国的主要能源之一,其开采和利用的重要性不言而喻。然而,煤矿事故频发,不仅造成了巨大的人员伤亡和财产损失,也对社会产生了深远的负面影响。视频监控系统作为实现煤矿智…

【QT】文件流操作(QTextStream/QDataStream)

文本流/数据流&#xff08;二级制格式&#xff09; 文本流 &#xff08;依赖平台&#xff0c;不同平台可能乱码&#xff09;涉及文件编码 #include <QTextStream>操作的都是基础数据类型&#xff1a;int float string //Image Qpoint QRect就不可以操作 需要下面的 …

【案例】蜂窝物联网联合金草生物打造金线莲“工厂”,让金线莲种植更简单

一、项目背景&#xff1a; 金线莲又名金线兰、金草、鸟人参&#xff0c;为兰科开唇兰属植物&#xff0c;是一种传统名贵中药材&#xff0c;对生长的环境要求极其苛刻。传统金线莲种植由于环境不可控&#xff0c;茎腐病、软腐病、猝倒病等病害频发&#xff0c;金线莲产业发展遇到…

使用npm版本管理工具解决npm 的EACCES permissions errors when installing packages globally错误

EACCES错误通常表示“权限被拒绝”&#xff0c;意味着您没有足够的权限来执行某个操作。在计算机领域&#xff0c;尤其是在文件系统和程序安装中&#xff0c;这个错误很常见。以下是可能导致EACCES错误的原因以及相应的解决方法&#xff1a; 文件系统权限&#xff1a;当您尝试…

2024年JavaScript前端框架维护者预测

来自Angular、Next.js、React和Solid的维护者和创建者分享了他们计划在2024年进行的改进 2024年的前端会是什么样子&#xff1f;自从我们打破了我们的水晶球&#xff0c;The New Stack与Angular&#xff0c;Next.js&#xff0c;React和Solid的创建者和维护者讨论了他们2024年的…

UVC 设备框架在 Linux 4.15 内核的演变

1. 概述 发现之前的uvc框架和现在的还是有一些差别的&#xff08;比如从videobuf 过渡到videobuf2&#xff09;&#xff0c;写个blog记录一下&#xff0c;方便以后查询&#xff0c;我的内核版本&#xff1a;Linux 4.15 UVC&#xff08;USB Video Class&#xff09;设备框架是…

ThingsBoard开源物联网平台介绍

1. Thingsboard 简介 ThingsBoard是一个基于Java的开源物联网平台&#xff0c;旨在实现物联网项目的快速开发、管理和扩展。它使用行业标准的物联网协议&#xff08;MQTT、CoAP和HTTP&#xff09;实现设备连接&#xff0c;并支持云和本地部署。ThingsBoard结合了可扩展性、容错…

混合云构建-VPN打通阿里云和Azure云

要在阿里云和Azure云之间通过VPN打通网络,您需要在两边分别设置VPN网关,并配置相应的连接和路由规则以确保两个云环境之间的网络流量可以互通。以下是一个基本的步骤指南: 为了更具体地说明如何在阿里云和Azure之间通过VPN打通网络,我们将通过一个简化的示例来演示整个过程…

【代码随想录 | 数组 05】螺旋矩阵 ||

文章目录 5.螺旋矩阵25.1题目5.2思路 5.螺旋矩阵2 5.1题目 59. 螺旋矩阵 II 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例一&#xff1a; 输入&#xff1a;n 3 输出&#xff…

全景解析 Partisia Blockchain:以用户为中心的全新数字经济网络

在区块链世界中&#xff0c;以比特币、以太坊网络为代表的主流区块链奠定了该领域早期的基础&#xff0c;并让去中心化、点对点、公开透明以及不可逆成为了该领域固有的意识形态。事实上&#xff0c;过于透明正在成为区块链规模性采用的一大障碍&#xff0c;我们看到 90% 以上的…

零知识玩转AVH(2)—— 怎么玩(1)

接前一篇文章&#xff1a;零知识玩转AVH&#xff08;1&#xff09;—— 初次接触 前一篇文章讲了AVH是什么&#xff0c;本文开始&#xff0c;详细AVH具体怎么玩。 由前一篇文章中提到的CSDN工作人员对于活动的说明&#xff0c;可以得出以下信息&#xff1a; 1. 这个任务是分两…

FineReport报表JS实现点击超链打开对话框报表并传参

例如在报表开发中&#xff0c;有如下需求&#xff1a; 点击当前报表中的某些文字&#xff0c;希望弹出另外的报表展示其他信息 &#xff08;即可以通过JS实现点击超链接打开报表对话框&#xff0c;并且可以传递参数到报表对话框中&#xff09;帆软帮助文档参考链接&#xff1a;…

AV1:编码块划分

​AV1是AOM于2018年发布的一代视频编码标准&#xff0c;相比于VP9其编码效率提升30%&#xff0c;相对于H.26X系列标准&#xff0c;AV1完全免去专利费可以自由使用。 AV1和其他视频编码标准类似&#xff0c;也采用基于块的编码架构。当编码器读进一帧图像&#xff0c;首先将其划…

签到提醒小工具:实时屏幕二维码检测+Server酱消息推送

前言 本文做了一个小工具&#xff0c;用来实时检测屏幕中出现的二维码&#xff0c;并通过Server酱发送信息推送到微信。 二维码检测 二维码检测主要通过opencv的detectAndDecode方法&#xff0c;基本用法如下&#xff1a; data, bbox, rectifiedImage detector.detectAndD…