MATLAB中如何将三维数组转置?

供稿:hz-xin.com     日期:2025-01-18
matlab三维数组如何转成二维数组?

A = rand(81,81,81);
n = 20;
A1 = A(:,:,n); % 81*81 二维
A2 = A(:,n,:); % 81*1*81 三维
A3 = A(n,:,:); % 1*81*81 三维

% 将三维转为 81*81 二维
A22 = reshape(A2,81,81);
A32 = reshape(A3,81,81);

高维数组的转置使用permute函数
具体调用语法
B = permute(A,order)
按照向量order指定的顺序重排A的各维。B中元素和A中元素完全相同。但由于经过重新排列,在A、B访问同一个元素使用的下标就不一样了。order中的元素必须各不相同。

例子
>> A=rand(4,5,6);
>> size(A)

ans =

4 5 6

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

ans =

5 4 6


原来A是4x5x6的矩阵
按照顺序[2 1 3]转置之后,原来的第一,第二维顺序改变
B的大小是5x4x6

1.一个三维数组由行、列和页三维组成,其中每一页包含一个由行和列构成的二维数组。
2.利用标准数组函数创建多维数组
A=zeros(4,3,2) 生成一个4行3列2页的三维全0数组,ones,rand和randn等函数有相似的用法。
3.利用直接索引方式生成多维数组
A=zeros(2,3)
A(:,:,2)=ones(2,3)
A(:,:,3)=4
上面的代码先生成一个二维数组作为三维数组的第一页,然后通过数组直接索引,添加第二页、第三页。
4.利用函数reshape和repmat生成多维数组
B=reshape(A,2,9)
B=[A(:,:,1) A(:,:,2) A(:,:,3)] %结果与上面一样。
reshape(B,2,3,3)
reshape(B,[2 3 3]) %结果与上面一样。
提示:reshape函数可以将任何维数的数组转变成其他维数的数组。
5.利用repmat函数生成多维数组
C=ones(2,3)
repmat(C,[1 1 3]) % repmat写出类似reshape的repmat(C,1,1,3)将显示出错
提示:repmat是通过数组复制创建多维数组的,上面的代码即是将数组C在行维和列维分别复制一次,然后再页维复制三次得到2×3×3的三维数组。
6.利用cat函数创建多维数组
a=zeros(2);
b=ones(2);
c=repmat(2,2,2);
D=cat(3,a,b,c)%创建三维数组
D=cat(4,a,b,c) %创建4维数组。
D(:,1,:,:) %查看第一列的数据。
size(D) %可以知道数组D的具体维数。
6.数组运算与处理
数组之间的运算要求两个数组在任何一维都必须具有相同的大小。
(1)squeeze函数用于删除多维数组中的单一维(即大小为1的那些维)
E=squeeze(D)
size(D) E的数据和D一样,但比D少了一维,只有2行、2列和3页。
(2)reshape函数可以将一个三维向量变成一维向量。
v(1,1,:)=1:6
squeeze(v)
v(:)
(3)reshape函数用于改变多维数组的行、列、页以及更高阶的维数,但不改变数组元素的总个数。
F=cat(3,2+zeros(2,4),ones(2,4),zeros(2,4))
G=reshape(F,[3,2,4])
H=reshape(F,[4 3 2]) 或K=reshape(F,2,12)
多维数组的重组按这样的顺序:第一页的第一列、第二列……,第二页的第一列、第二列……。
7.sub2ind函数和ind2sub函数用于多维数组的直接引用,索引顺序与重组顺序一致。
sub2ind(size(F),1,1,1) %求第1行、第1列、第1页的数值的单一索引
sub2ind(size(F),1,2,1) %求第1行、第2列、第1页的数值的单一索引
sub2ind(size(F),1,2,3) %求第1行、第2列、第3页的数值的单一索引

[r c p]=ind2sub(size(F),19) %由单一索引求其对应的行列页数值。
8.函数flipdim用于多维数组的翻转,相当于二维数组中的flipud和fliplr函数。例如下面的代码进行按行、列和按页翻转。
M=reshape(1:18,2,3,3)
flipdim(M,1) %每一页中的行翻转
flipdim(M,2) %每一页中的列翻转
flipdim(M,3) %将第一和第三页翻转调换
9.函数shiftdim用于循环轮换一个数组的维数。如果一个数组r行、c列和p页,则循环轮换一次,就生成一个c行、p列和r页的数组。
M %重新调用
shiftdim(M,1) %轮换一次
shiftdim(M,2) %轮换两次
数组轮换后规律很难直观理解,我们可以将三维数组看成一个类似魔方的方形盒子
函数shiftdim也支持负的循环轮换次数。执行该轮换时,数组的维数增加,并且多出的维数均为单一维。
M %重新调用
size(M)
shiftdim(M,-1)
size(ans).
10.函数permute和ipermute用于实现多维条件下的转置操作。从本质上讲permute函数是shiftdimhas函数的扩展。
M %重新调用
permute(M,[2 3 1])
shiftdim(M,1) %两者结果一样
permute函数中的参数[2 3 1]表示使函数第二维成为第一维,第三维成为第二维,第一维成为第三维。
11. permute(M,[2 1 3])
[2 1 3]表示将数组的行列相互转置,页保持不变(只在第一和第二维转置)。
permute函数的第一个参数为待转置的数组,第二个参数为转置顺序,它必须是待转置的多维数组的维数的某种排列,否则所进行的转置无法进行。
permute函数也可以用来将一个数组变成更高维的数组,例如shiftdim(M,-1)也可以用permute函数来实现。
permute(M,[4 1 2 3])
这是 因为任何一个数组都具有大于其本身尺寸的更高维数,并且这些维数均为单一维数。例如二维数组具有页这一维,只是只有一页。总之超过数组本身大小的维数都是单一维。M是一个三维数组,其第四维必为单一维,因此将M的第四维与第一维转置,第一维变成了单一维。
12.二维数组两次转置变换回原来的形式,对于多维数组,用函数ipermute来取消permute所执行的转置操作。
M %重新调用
permute(M,[3 2 1])
ipermute(M,[3 2 1]) %在我的Matlab上运行没有达到预期效果
13.size函数返回数组每一维的大小
numel函数返回数组的总元素个数
当不指定size的返回值时,将返回一个由数组的各维数组成的向量。当我们知道数组的维数时,可以将维数返回到指定变量中。
[r c p]=size(M)
r=size(M,1)
c=size(M,2)
p=size(M,3)
v=size(M,4)
当一个数组的维数或者某数组维数不确定时,可以利用函数ndims获得数组的维数值。例如:ndims(M),与length(size(M))等效。

help shiftdim

help permute

MATLAB中如何将三维数组转置?
9.函数shiftdim用于循环轮换一个数组的维数。如果一个数组r行、c列和p页,则循环轮换一次,就生成一个c行、p列和r页的数组。M %重新调用 shiftdim(M,1) %轮换一次 shiftdim(M,2) %轮换两次 数组轮换后规律很难直观理解,我们可以将三维数组看成一个类似魔方的方形盒子 函数shiftdim也支持负的循...

求matlab三维数组转置函数
高维数组的转置使用permute函数 具体调用语法 B = permute(A,order)按照向量order指定的顺序重排A的各维。B中元素和A中元素完全相同。但由于经过重新排列,在A、B访问同一个元素使用的下标就不一样了。order中的元素必须各不相同。例子 >> A=rand(4,5,6);>> size(A)ans = 4 5 6 >>...

MATLAB 中 ipermute 广义反转置函数的实现分析
首先,创建一个四维数组,然后利用permute函数通过设定参数,如 [4 1 2 3],可以将原数组的维度进行变换。例如,将第4维移到第1维,第1维移到第2维等。观察变换后的矩阵,你会发现每个元素的位置变化反映了原数组维度的变化,比如0.4018的新位置是0.3377,这是原数组在维度转换后的体现。通过size...

matlab中如何转置数组或向量?
1、在命令行窗口中输入“r = [ 1 2 3 4 ];tr = r'”,其中单引号(')是用于转置操作的。2、按回车键之后,可以看到将行向量r转置成为了列向量tr。3、也可以将列向量转置成为行向量,在命令行窗口中输入“v = [1;2;3;4];tv = v'”。4、按回车键之后,可以看到将列向量v转置成为了...

Matlab笔记12:运算符的优先级、不同数组大小的运算兼容性
4) 若一个为矩阵,另一个为具有相同行数或列数的向量,可以进行运算。5) 若一个为矩阵,另一个为具有相同行数、列数的三维数组,可以进行运算。这些规则适用于Matlab的2016版及更高版本。以下是一些程序示例,展示了如何处理不同大小的数组:a=[1 2;3 4],b=[1 2],c=[3;4]。示例1:`a...

matlab中怎么求矩阵的转置
第一步我们首先需要知道matlab中矩阵后面加单引号是共轭转置,加点和单引号是转置。第二步在matlab命令行窗口中输入“A=[124;567]”。第三步输入A.对矩阵进行转置,可以看到2行3列的矩阵变成了3行2列的矩阵,行列变换。第四步我们也可以看一下共轭转置,输入A是相同的结果。第五步我们也可以看一下...

matlab中实现数组给数组赋值步骤是什么?
1、首先,我们打开MATLAB编程软件。在命令行中输入A=[1,2,3;4,5,6;7,8,9].创建一个3*3数组矩阵。2、首先,我们对矩阵进行转置操作。输入A',按下回车即可。3、此外,转置我们还可以用命令来实现,即transpose(A)。按下回车后发现A已经被转置,和第二步效果一样。4、数组矩阵的旋转操作,用...

matlab中’转置两次后能否回到原图像
对矩阵转置2次,一定回到原矩阵。但对多维(三维以上)数组,不能转置。同理,对于二值图和索引图,可转置2次,回到原图。但对rgb图则不能直接转置,要分r面,g面,b面分别转置,才行。

matlab中转置符号怎么打
1、使用单引号',例如输入"A=[1 2 4;5 6 7]",然后输入A.',你会看到原矩阵由2行3列变为3行2列,矩阵的行和列发生了交换,这就是常规转置的效果。2、如果矩阵是实数,'和.'的效果是一样的,都是转置。但如果是复数矩阵,'表示转置,.'表示共轭转置,两者的结果在实数矩阵中是相同的。3...

Matlab Simulink 有没有实现转置的模块啊?
Math Operations库,Math Function模块,参数Function选择transpose。