Matlab中从结构体数组提取数据时保留维度的更优方法
从Matlab结构体数组提取维度保留的数据的最优方法
当你需要从结构体数组中提取字段b并保留其原有维度时,无需先扁平化再reshape加修正,直接用以下几种更简洁的方法:
方法1:使用vertcat直接拼接
如果每个结构体的b是相同维度的行/列向量(比如每个b是1×2或2×1的数组),直接用vertcat将所有b按垂直方向拼接:
bb = vertcat(myData.data.b);
例如,若myData.data(1).b = [1,2],myData.data(2).b = [3,4],执行后bb会直接得到:
1 2 3 4
完全保留每个b的元素顺序,无需后续修正。
方法2:使用cat指定拼接维度
如果需要更灵活地控制拼接方向(比如水平拼接或更高维度拼接),用cat函数指定维度参数:
- 垂直拼接(和
vertcat效果一致):bb = cat(1, myData.data.b); - 若每个
b是列向量,想拼接成矩阵的列:bb = cat(2, myData.data.b);
方法3:针对多维数组的通用方法
如果每个b是更高维度的数组(比如2×3矩阵),可以用cell2mat结合结构体转cell的方式:
bb = cell2mat({myData.data.b});
该方法会自动将所有同维度的b数组按垂直方向拼接成大数组,完全保留原有维度结构。
为什么原方法会出现顺序问题?
[myData.data(:).b]会将所有b的元素按列优先的顺序扁平化为一个一维向量,后续的reshape也是按列优先重新排列,这就导致了部分行的元素顺序被打乱。而上面的方法直接对每个b数组进行整体拼接,从根源上避免了维度信息丢失和顺序错乱。
内容的提问来源于stack exchange,提问作者ndarkness
相关产品推荐
相关产品推荐

