前言:

本章通过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 vector dimorder. For example, permute(A,[2 1]) switches the row and column dimensions of a matrix A. In general, the ith dimension of the output array is the dimension dimorder(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     9

K>> B = permute(A, [1 2])

B =

1     2     3
     4     5     6
     7     8     9

K>> 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. 1.8 编程基础之多维数组 09 矩阵乘法 6分 python

    http://noi.openjudge.cn/ch0108/09/ """ 1.8 编程基础之多维数组 09 矩阵乘法 6分 http://noi.openjudge. ...

  2. 1.8 编程基础之多维数组 11 图像旋转 4分 python

    http://noi.openjudge.cn/ch0108/11/ """ 1.8 编程基础之多维数组 11 图像旋转 4分 http://noi.openjudge. ...

  3. 1.8 编程基础之多维数组 22 神奇的幻方 python

    http://noi.openjudge.cn/ch0108/22/ """ 1.8 编程基础之多维数组 22 神奇的幻方 http://noi.openjudge.cn ...

  4. 1.8 编程基础之多维数组 08 矩阵加法 python

    http://noi.openjudge.cn/ch0108/08/ """ 1.8 编程基础之多维数组 08 矩阵加法 http://noi.openjudge.cn/ ...

  5. 1.8 编程基础之多维数组 04 错误探测 python

    http://noi.openjudge.cn/ch0108/04/ """ 1.8 编程基础之多维数组 04 错误探测 http://noi.openjudge.cn/ ...

  6. 1.8编程基础之多维数组 03 计算矩阵边缘元素之和 python

    http://noi.openjudge.cn/ch0108/03/ """ 1.8编程基础之多维数组 03 计算矩阵边缘元素之和 http://noi.openjudg ...

  7. openCV图像矩阵Mat和二维数组的互相转换

    openCV图像矩阵Mat和二维数组的互相转换 在openCV的应用中,我们获取图像的矩阵信息很简单.但是我们可能想调用其他的矩阵运算库(比如Eigen库)来进行计算.那么我们就需要把openCV读取 ...

  8. 【MATLAB】 01 基本操作与数组输入

    文章目录 01 基本操作与数组输入 Intro 认识 MATLAB 操作界面 像使用计算器一样使用 MATLAB Exercise 嵌套函数 变量 数据类型 `who` 与 `whos` 特殊变量与常 ...

  9. matlab怎么输入二维数组,MATLAB二维数组(矩阵)的创建

    MATLAB 二维数组与矩阵之间有很大的相关性,二维数组是由实数或复数排列成矩形构成的,而且从数据结构上看,矩阵和二维数组没有区别. 本节将讲解 MATLAB 二维数组的两种创建方式. 直接输入 矩阵 ...

最新文章

  1. 级联下拉框效果,动态加载图片
  2. 从JDK9的Flow接口说起
  3. yii mysql 主从_mysql主从同步实践 YII
  4. 通过8个技巧让你成为一个超强的Linux终端用户
  5. linux中pak命令,如何在Linux系统中安装Flatpak
  6. JDK可视化工具 | JConsole操作指南,手把手教会你
  7. Xcode 4.2 中的Automatic Reference Counting (ARC) (转)
  8. MacBook 摄像头不工作怎么解决
  9. 实习踩坑之路:利用Java8新特性实现不同范型List之间的相互转换
  10. tomcat session过期时间的设置
  11. RubyonRails是WebDev最佳选择的5个原因
  12. windows强制删除文件命令
  13. VSLAM基础(七)————光束平差法Bundle Adjustment
  14. 解决webView无法播放视频的问题
  15. PCB线路板进行热设计的方法都有哪些?
  16. 漏洞篇(SQL注入一)
  17. iOS环境股票行情报价功能历程
  18. 微信小程序实现押金管理(支付押金、申请退还押金、押金明细)
  19. android7 显示到pc,安卓手机上的画面怎么投屏到Win7电脑上?超详细投屏方法看这里!...
  20. SoftMax函数,交叉熵损失函数与熵,对数似然函数

热门文章

  1. 文件上传/下载接口(超简单的教程来了)
  2. 【SCI征稿】工程建筑材料数学类SCI,进展顺利,接收领域广
  3. 下载leaflet使用的瓦片地图
  4. 蚂蚁金服 mPaaS IDEA 插件实践Demo演示
  5. 5G NR 概念解释
  6. Qt编写物联网管理平台49-设备模拟工具
  7. 计算机操作系统(第五版)第四章中重要的课后问题
  8. 让收件人看到自已定的发件人 名字 (displayname)
  9. Intel8086处理器使用NASM汇编语言实现操作系统09-关于数组复制的实现/movsb/movsw/cld/std/rep
  10. Udesk微前端之路