Matlab 的 reshape 会先将输入数据按列扫描变为一维列向量,输出数据则是根据列向量逐列填充。在转换数据时如果不注意这一点很容易踩坑!

官方文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
reshape - 重构数组
此 MATLAB 函数 使用大小向量 sz 重构 A 以定义 size(B)。例如,reshape(A,[2,3]) 将
A 重构为一个 2×3 矩阵。sz 必须至少包含 2 个元素,prod(sz) 必须与 numel(A) 相同。

B = reshape(A,sz)
B = reshape(A,sz1,...,szN)

输入参数
A - 输入数组
向量 | 矩阵 | 多维数组
sz - 输出大小
由整数组成的行向量
sz1,...,szN - 每个维度的大小
两个或以上的整数 | [](可选)

输出参数
B - 重构的数组
向量 | 矩阵 | 多维数组 | 元胞数组

MATLAB 官方文档:reshape

使用笔记

第一次使用reshape的时候,没注意到它是按列获取数据的,再进行重构矩阵的,掉入坑中

1
2
3
4
5
6
7
8
9
10
11
12
>> A = 1:6

A =

1 2 3 4 5 6

>> reshape(A,2,3)

ans =

1 3 5
2 4 6

如果要把1d数组变为2d数组,并且希望它是按行进行重构数组的,就需要把转化后的行和列进行调换,再把reshape后的数组进行转置

1
2
3
4
5
6
>> B = reshape(A,3,2)'

ans =

1 2 3
4 5 6

如果是想要把2d数组变为1d数组,并且希望是按行提取数据的,就需要先把矩阵转置,再用reshape

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
>> B

B =

1 2 3
4 5 6

>> reshape(B,1,[])

ans =

1 4 2 5 3 6

>> reshape(B',1,[])

ans =

1 2 3 4 5 6

Ref