Matlab 基础01 - 多维数组的排列转换和Permute 函数
前言:
本章通过Matlab官网的例子,介绍Matlab Permute函数的数组维度置换功能:由于官网的说明比较晦涩难懂,所以,这里用自己的语言和理解重新组织了一下。
1 语法:
B = permute(A,dimorder)
官网说明:
B = permute(A,dimorder)
按照向量dimorder
指定的顺序重新排列数组的维度。例如,permute(A,[2 1])
交换矩阵A
的行和列维度。通常,输出数组的第 i 个维度是输入数组的维度dimorder(i)
。
B = permute(A,dimorder)
rearranges the dimensions of an array in the order specified by the vectordimorder
. For example,permute(A,[2 1])
switches the row and column dimensions of a matrixA
. In general, the ith dimension of the output array is the dimensiondimorder(i)
from the input array.
2 输入参数:
A
- 输入数组
向量 | 矩阵 | 多维数组(vector | matrix | multidimensional array)
dimorder
— Dimension order - 维度顺序
行向量维度顺序,指定为具有唯一正整数元素的行向量,这些元素代表输入数组的维度。
Dimension order, specified as a row vector with unique, positive integer elements that represent the dimensions of the input array.
This is the specified vector order in which permutation is being done
【这个函数最难理解的就是这个维度顺序】
Return Value: It returns the permuted matrix.
2 执行逻辑详细:
在本节,我们用官网的例子详细说明一下这个函数的使用:
问题抛出:【为方便理解,英文贴出来】
Create a 3-by-4-by-2 array and permute it so that the first and third dimensions are switched, resulting in a 2-by-4-by-3 array.
rng default
A = rand(3,4,2)
先创建一个3行4列2Page的3-D数组
A = A(:,:,1) =0.8147 0.9134 0.2785 0.96490.9058 0.6324 0.5469 0.15760.1270 0.0975 0.9575 0.9706A(:,:,2) =0.9572 0.1419 0.7922 0.03570.4854 0.4218 0.9595 0.84910.8003 0.9157 0.6557 0.9340
B = permute(A,[3 2 1])
B = B(:,:,1) =0.8147 0.9134 0.2785 0.96490.9572 0.1419 0.7922 0.0357B(:,:,2) =0.9058 0.6324 0.5469 0.15760.4854 0.4218 0.9595 0.8491B(:,:,3) =0.1270 0.0975 0.9575 0.97060.8003 0.9157 0.6557 0.9340
【案,这个结果能一眼看的懂,但是,里面表征的逻辑如何?我们看一下】
3 vector dimorder
维度顺序
【在真正理解之前,我们看一下这个官方解释】
dimorder
— Dimension order - 维度顺序
行向量
维度顺序,指定为具有唯一正整数元素的行向量,这些元素代表输入数组的维度。
Dimension order, specified as a row vector with unique, positive integer elements that represent the dimensions of the input array.
【这东西中英文我都没看懂,后面是看了一篇博客,猜的,咱们重新定义一下】
维度顺序:就是多维数组的维度数值【为正整数】,维度数值用一个行向量来表示。
再详细一点,如果我们有一个N维的多维数组,那么,就可以用规范的书写来重新定义维度的顺序,这个规范放在一个唯一的行向量里面,行向量里的每一个元素都是维度的数值标号,从正整数1到N。
4 维度顺序在2-D的数组的应用
【案,维度顺序是一个隐喻的行向量】
例一:列变换
% MATLAB code for column permutation
% and specifying a 3*3 matrix
A = [1 2 34 5 67 8 9]% Initializing a list of columns (Index)
% in which above matrix need to be
% permuted
index = [3 1 2]% Getting the column permuted matrix B
B = A(:, index)
我们看上面这个例子,index就一个维度的定义,现在,A矩阵为3by3的矩阵,那么这个[3 1 2]的行变量到底是表述什么呢? 他 说是表述列的转置标识:
A矩阵的列表述的原来的值应该是[1 2 3],就是按顺序的1,2,3列组成的数组,现在改成[3 1 2]就是列的顺序进行调换【注意每列的值不变】就,结果为:
A =1 2 34 5 67 8 9 index =3 1 2 B =3 1 26 4 59 7 8
例二,行变换
A的创立不变,变的是转换调用的位置,现在index放在行上面:
% MATLAB code for rows permutation.
% Specifying a 3*3 matrix
A = [1 2 34 5 67 8 9]% Initializing a list of rows (Index)
% in which above matrix need to be
% permuted
index = [3 1 2]% Getting the rows permuted matrix B
B = A(index, :)
注意:index的位置已经变换了,
B = A(index, :)
结果如下:
A =1 2 34 5 67 8 9 index =3 1 2 B =7 8 91 2 34 5 6
4 维度顺序+Permute 在2维数组的实例分析【就是数组转置】:
% MATLAB code for permute()
% Creating a random 2*3 matrix
A = rand(2, 3)% Calling the permute() function
% over the above matrix in the
% dimension order of [2 1]
B = permute(A, [2 1])
A =0.32773 0.12633 0.677520.26285 0.91283 0.42994 B =0.32773 0.262850.12633 0.912830.67752 0.42994
【这里,行向量[2 1]重新定义了 vector order, 如果用[1 2]的顺序的话,原矩阵的结构是不变的】
对应2维数组,或者向量来说,就是行列转置了。
K>> A = [1 2 3
4 5 6
7 8 9]A =
1 2 3
4 5 6
7 8 9K>> B = permute(A, [1 2])
B =
1 2 3
4 5 6
7 8 9K>> B = permute(A, [2 1])
B =
1 4 7
2 5 8
3 6 9
【案,这里再补充一下,这个2-D的向量A里面,我们用行向量[1 2]来表征向量A的两个维度,这里默认为:维度1为行,维度2为列,写为[1,2],如果我们现在要转置向量A,或者说转置数组A,我们只需要将vector dimorder进行重写,也就是改为[2 1],写到这里再不懂,那...我能说你什么好
】
5 维度顺序+Permute在3-D array的实例分析:
还是用刚才的例子,之前是一个3行4列2Page的3-D数组,如果我们用vector dimorder来表示,就是[1,2,3],注意这里1表述维度1,2表示维度2,3表示维度3,所以,他是正整数且唯一的。
维度1我们一般叫做行【或者 X轴】,维度2我们一般叫做列【或者Y轴】,维度3Mt叫做Page【或者Z轴】, 其中,
维度1 = 3 行
维度2 = 4 列
维度3 = 2 页
现在用permute,我们把这个行向量[1,2,3],变成什么?变成了[3,2,1]
B = permute(A,[3 2 1])
于是有,之前安装维度1,维度2,维度3进行表述的3-D数组变成了,由维度3,维度2,维度1表述的3D-数组,
那么,再按照
原来维度1 = 3
原来维度2 = 4
原来维度3 = 2
的原有的维度定义,新的维度定义,按照维度顺序表[3,2,1],就变成了:
维度顺序表维度1 = 原来维度3 = 2 行
维度顺序表维度2 = 原来维度2 = 4 列【不变】
维度顺序表维度3 = 原来维度1 = 3 页
也就是,如下的一个多维数组的构造:
B =
B(:,:,1) =0.8147 0.9134 0.2785 0.96490.9572 0.1419 0.7922 0.0357B(:,:,2) =0.9058 0.6324 0.5469 0.15760.4854 0.4218 0.9595 0.8491B(:,:,3) =0.1270 0.0975 0.9575 0.97060.8003 0.9157 0.6557 0.9340
5 从空间上考虑变换的理解:
在这边博文里面,作者比较形象的画了一个3D坐标的选择如图,大家如果没听懂可以再看看这篇文章
MATLAB permute命令的操作逻辑_jzz3933的博客-CSDN博客_matlab permutehttps://blog.csdn.net/jzz3933/article/details/103629470?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165401505916780357220072%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165401505916780357220072&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-103629470-null-null.142%5Ev11%5Epc_search_result_control_group,157%5Ev12%5Econtrol&utm_term=MATLAB+permute%E5%91%BD%E4%BB%A4%E7%9A%84%E6%93%8D%E4%BD%9C%E9%80%BB%E8%BE%91&spm=1018.2226.3001.4187
参考:
置换数组维度 - MATLAB permute - MathWorks 中国
(3条消息) matlab对矩阵的排列顺序,matlab数组按照指定顺序重排_weixin_39644146的博客-CSDN博客
MATLAB permute命令的操作逻辑_jzz3933的博客-CSDN博客_matlab permute
How to Permute the Rows and Columns in a Matrix on MATLAB? - GeeksforGeeks
Matlab 基础01 - 多维数组的排列转换和Permute 函数相关推荐
- 1.8 编程基础之多维数组 09 矩阵乘法 6分 python
http://noi.openjudge.cn/ch0108/09/ """ 1.8 编程基础之多维数组 09 矩阵乘法 6分 http://noi.openjudge. ...
- 1.8 编程基础之多维数组 11 图像旋转 4分 python
http://noi.openjudge.cn/ch0108/11/ """ 1.8 编程基础之多维数组 11 图像旋转 4分 http://noi.openjudge. ...
- 1.8 编程基础之多维数组 22 神奇的幻方 python
http://noi.openjudge.cn/ch0108/22/ """ 1.8 编程基础之多维数组 22 神奇的幻方 http://noi.openjudge.cn ...
- 1.8 编程基础之多维数组 08 矩阵加法 python
http://noi.openjudge.cn/ch0108/08/ """ 1.8 编程基础之多维数组 08 矩阵加法 http://noi.openjudge.cn/ ...
- 1.8 编程基础之多维数组 04 错误探测 python
http://noi.openjudge.cn/ch0108/04/ """ 1.8 编程基础之多维数组 04 错误探测 http://noi.openjudge.cn/ ...
- 1.8编程基础之多维数组 03 计算矩阵边缘元素之和 python
http://noi.openjudge.cn/ch0108/03/ """ 1.8编程基础之多维数组 03 计算矩阵边缘元素之和 http://noi.openjudg ...
- openCV图像矩阵Mat和二维数组的互相转换
openCV图像矩阵Mat和二维数组的互相转换 在openCV的应用中,我们获取图像的矩阵信息很简单.但是我们可能想调用其他的矩阵运算库(比如Eigen库)来进行计算.那么我们就需要把openCV读取 ...
- 【MATLAB】 01 基本操作与数组输入
文章目录 01 基本操作与数组输入 Intro 认识 MATLAB 操作界面 像使用计算器一样使用 MATLAB Exercise 嵌套函数 变量 数据类型 `who` 与 `whos` 特殊变量与常 ...
- matlab怎么输入二维数组,MATLAB二维数组(矩阵)的创建
MATLAB 二维数组与矩阵之间有很大的相关性,二维数组是由实数或复数排列成矩形构成的,而且从数据结构上看,矩阵和二维数组没有区别. 本节将讲解 MATLAB 二维数组的两种创建方式. 直接输入 矩阵 ...
最新文章
- 级联下拉框效果,动态加载图片
- 从JDK9的Flow接口说起
- yii mysql 主从_mysql主从同步实践 YII
- 通过8个技巧让你成为一个超强的Linux终端用户
- linux中pak命令,如何在Linux系统中安装Flatpak
- JDK可视化工具 | JConsole操作指南,手把手教会你
- Xcode 4.2 中的Automatic Reference Counting (ARC) (转)
- MacBook 摄像头不工作怎么解决
- 实习踩坑之路:利用Java8新特性实现不同范型List之间的相互转换
- tomcat session过期时间的设置
- RubyonRails是WebDev最佳选择的5个原因
- windows强制删除文件命令
- VSLAM基础(七)————光束平差法Bundle Adjustment
- 解决webView无法播放视频的问题
- PCB线路板进行热设计的方法都有哪些?
- 漏洞篇(SQL注入一)
- iOS环境股票行情报价功能历程
- 微信小程序实现押金管理(支付押金、申请退还押金、押金明细)
- android7 显示到pc,安卓手机上的画面怎么投屏到Win7电脑上?超详细投屏方法看这里!...
- SoftMax函数,交叉熵损失函数与熵,对数似然函数