>> 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版本中逐个编写循环和填充数字更好的方法?
答案 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
水平反转矩阵中的元素。