如何在Matlab中将第一维放在第3维?

时间:2015-01-05 10:05:49

标签: matlab reshape

假设我有一个矩阵

A=[1 2 3]

是行矩阵。不是我想做“页面”矩阵,即沿第三维对齐元素。

我注意到,以下

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

有效,而以下

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

没有。

为什么?

2 个答案:

答案 0 :(得分:0)

你的问题不是很清楚。如果我是对的,你希望你的矩阵成为B = [0,0,1; 0,0,2; 0,0,3]。

输入以下内容可以通过转置功能轻松完成:

 B(:,:,3)=A' 

而不是使用转置函数,它是转置的推广。此外,您的操作可能不会"工作"因为permute是一个影响数组维度的操作,而不是影响其元素的操作

答案 1 :(得分:0)

请注意,A的尺寸为[1 3],而不是[3 1]。正如CST-Link指出的那样,这与[1 3 1 1]等等相同,因为单个维度被删除了。

size(A,1) = 1
size(A,2) = 3   <-- You want this to be the third dimension
size(A,3) = 1

现在,你要做的是将第二个维度(告诉你有多少列的那个)与第三个维度(告诉你你有多少个切片的那个)对齐。

使用permute时,您可以指定希望原始尺寸发生的顺序。即如果您对矢量执行permute(A, [2 1]),则会转置它。第二个维度现在是第一个维度,反之亦然。你想要第二个dimemsion是第三个,并保持第一个维度不变,所以:

permute(A, [1 3 2])

如果你这样做:

permute(A, [3 2 1])

您将第三个维度作为第一个维度(size(A,1) = 1),第二个维度(size(A,2) = 3)将是第二个维度(即它不会更改),第一维度是第三维度。因此,唯一改变的维度是第一和第三。这些都是1开头,所以没有任何改变。

请注意,在这种特殊情况下您也可以使用shiftdim

shiftdim(A,-1)