gpt4 book ai didi

matlab - matlab中的permute函数是如何工作的

转载 作者:太空宇宙 更新时间:2023-11-03 19:37:23 30 4
gpt4 key购买 nike

这是一个有点愚蠢的问题,但我似乎无法弄清楚 permute 在 matlab 中是如何工作的。以文档为例:

A = [1 2; 3 4]; permute(A,[2 1])
ans =
1 3
2 4

这是怎么回事?这如何告诉 matlab 需要交换 3 和 2?

最佳答案

哇,这是迄今为止我使用过的所有不同 SDK 中最难搞清楚的功能之一。因此,我在“我的置换函数理解之旅”中多次使用了F*ck这个词。这里有一些例子可以防止你遭受类似的极度痛苦:

首先,让我们记住matlab中矩阵的维数名称:A = zeros(4,5,7),矩阵A有4行5列7页。如果不指定维度,其默认计数设置为 1。(即 B=zeros(10,3) 有 10 行、3 列和 1 页,此顺序很重要!)

传递给 permute

order 参数在矩阵中交换这些维度并产生一个尴尬的数组组合,我认为 permute 是一个误称这种效果。

现在让我们转到示例,最后:

% A has 4 rows, 2 columns and 1 page
A =[ 5 6
8 2
2 2
1 3];
% (numbers in the order argument of permute function indicates dimensions,
% 3 = page , 2 = column and 1 = row dimensions):

B = permute(A,[3,2,1]); % [3,2,1] means [ page,column,row]
C = permute(A,[3,1,2]); % [3,1,2] means [ page,row,column]
D = permute(A,[1,3,2]); % [1,3,2] means [ row,page,column]
E = permute(A,[2,3,1]); % [2,3,1] means [ column,page,row]
F = permute(A,[2,1,3]); % [2,1,3] means [ column,row,page]
G = permute(A,[1,2,3]); % [1,2,3] means [ row,column,page]

解释:

B = permute(A,[3,2,1]);

1x2x4(A 的 page(3) 维度 = 1,A 的 column(2) 维度 = 2,A 的 row(1) 维度 = 4;1 是行维度,2 是列维度,4 是页面维度生成的 B。继续阅读这里直到你理解)因此,将有 4 个 1x2 (1x2x4) 行矩阵。如:

ans(:,:,1) =    
5 6

ans(:,:,2) =
8 2

ans(:,:,3) =
2 2

ans(:,:,4) =
1 3

*

C = permute(A,[3,1,2]);

1x4x2(A 的 page(3) 维度 = 1,A 的 row(1) 维度 = 4,A 的 column(2) 维度 = 2;1 是行维度,4 是列维度,2 是页面维度生成的 C)因此,将有 2 个 1x4 (1x4x2) 行矩阵。如:

ans(:,:,1) =    
5 8 2 1

ans(:,:,2) =
6 2 2 3

*

D = permute(A,[1,3,2]);

4x1x2(A 的行(1)维度 = 4,A 的页面(3)维度 = 1,A 的列(2)维度 = 2;4 是行维度,1 是列维度,2 是页面维度生成的 D)因此,将有 2 个 4x1 (4x1x2) 列矩阵。如:

ans(:,:,1) =

5
8
2
1


ans(:,:,2) =

6
2
2
3

*

E = permute(A,[2,3,1]);

2x1x4(A 的列(2)维度 = 2,A 的页面(3)维度 = 1,A 的行(1)维度 = 4;2 是行维度,1 是列维度,4 是页面维度生成的 E)因此,将有 4 个 2x1 (2x1x4) 列矩阵。如:

ans(:,:,1) =

5
6

ans(:,:,2) =

8
2

ans(:,:,3) =

2
2

ans(:,:,4) =

1
3

*

F = permute(A,[2,1,3]); % this is transpose and same as [2,1]

2x4x1(A 的列(2)维度 = 2,A 的行(1)维度 = 4,A 的页面(3)维度 = 1;2 是行维度,4 是列维度,1 是页面维度生成的 F)因此,将有 1 个 2x4 (2x4x1) 矩阵。如:

 ans =

5 8 2 1
6 2 2 3

*

G = permute(A,[1,2,3]); % this makes no difference,  using to show the reasoning

4x2x1(A 的行(1)维度 = 4,A 的列(2)维度 = 2,A 的页面(3)维度 = 1;4 是行维度,2 是列维度,1 是页面维度生成的 G)因此,将有 1 个 4x2 (4x2x1) 矩阵(本身!)。如:

 ans =

5 6
8 2
2 2
1 3

是的,这看起来很难,确实很难!要检查您是否理解透彻,请尝试预测方阵的相似不同排列。玩得开心,我的意思是减轻痛苦:)

关于matlab - matlab中的permute函数是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21100168/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com