Matlab中12×3数组转4×3×3三维数组的重塑问题求助
解决Matlab中12×3数组转4×3×3三维数组的问题
嘿,我来帮你搞定这个reshape的麻烦!Matlab的reshape函数默认是列优先填充的,这大概率就是你没得到预期结果的原因——咱们得先理清元素的排列逻辑,再调整维度转换的方式。
第一步:确认读取的数组
先确保你正确加载并获取了.mat文件里的数组:
% 加载.mat文件 data = load('diegm.mat'); % 查看文件里的变量名,确认目标数组名称 disp(fieldnames(data)); % 取出数组(假设变量名为diegm) A = data.diegm; % 验证数组大小,应该是12×3 disp(size(A));
核心问题:Matlab的列优先规则
Matlab的所有数组操作(包括reshape)默认都按列优先处理——简单说就是,它会先填满新数组的第一列,再第二列,以此类推。而你想要的三维数组看起来是按行优先或自定义分组排列的,直接用reshape(A,4,3,3)自然会不符合预期。
方案1:按行分组生成三维切片
如果你想把原始12×3数组的每4行作为一个三维切片(比如val(:,:,1)是前4行,val(:,:,2)是中间4行,val(:,:,3)是最后4行),用cat函数拼接会比reshape更直观:
val = cat(3, A(1:4,:), A(5:8,:), A(9:12,:));
要是想用reshape实现,就需要配合转置调整顺序:
val = permute(reshape(A', 3, 4, 3), [2, 1, 3]);
方案2:匹配你给出的预期结果
看你给出的预期三维数组,元素排列不是简单的按行分组,这时候我们需要先把原始数组按行优先展开,再重新reshape,最后调整维度:
- 把原始数组转成行优先的一维向量:
A_flat = reshape(A.', 1, []); % 转置后reshape成行向量,实现行优先展开 - 将一维向量reshape为4×3×3的数组:
val = reshape(A_flat, 4, 3, 3); - 如果维度顺序不对,用
permute调整(可根据你的预期结果微调参数):val = permute(val, [1,3,2]);
验证结果
生成val后,用以下命令查看每个切片,确认是否符合预期:
disp(val(:,:,1)); disp(val(:,:,2)); disp(val(:,:,3));
如果还是有差异,可能是你对原始数组的维度描述有偏差——比如数组实际是3×12而非12×3,这时候先执行A = A.'转置,再重复上述步骤即可。
内容的提问来源于stack exchange,提问作者Trey
相关产品推荐
相关产品推荐

