沿反向尺寸重塑阵列

时间:2017-11-05 07:21:34

标签: arrays matlab

>> A = [ 1 2 3 3 4 5 5 6 7 7 8 9 ];
>>
>> B = reshape(A, 2, 2, 3)

B(:,:,1) =

     1     3
     2     3


B(:,:,2) =

     4     5
     5     6


B(:,:,3) =

     7     8
     7     9

由于reshape只能以保留线性索引的方式改变给定数组的大小,但我想沿着相反的维度重新整形数组。

例如,将A转换为

>> C = reverse-reshape(A, 2, 2, 3)  % not required to be only one function

C(:,:,1) =

     1     3
     5     7

C(:,:,2) =

     2     4
     6     8

C(:,:,3) =

     3     5
     7     9

有没有比在R2017b版本中逐个编写循环和填充数字更好的方法?

1 个答案:

答案 0 :(得分:1)

您首先使用相反的维度reshape,然后将第一个和第三个维度与permute交换以对元素重新排序,以便以相反的顺序填充它们:

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

B(:,:,1) =

     1     3
     5     7


B(:,:,2) =

     2     4
     6     8


B(:,:,3) =

     3     5
     7     9

为了做到这一点,通常独立于矩阵维度并假设它是一个3D矩阵,声明一个名为dims的数组,其中包含输出所需的矩阵大小,反转元素并将其提供给reshape

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

fliplr水平反转矩阵中的元素。