Matlab中计算结构体数组嵌套字段各位置均值的问题
解决MATLAB结构体数组字段按位置求平均的问题
嘿,我明白你遇到的麻烦了——MATLAB在处理结构体数组的索引时,默认不会自动把多个返回值打包成数组,所以直接用CDF(:).cdfSR(1)才会报错。别担心,下面几种方法都能帮你搞定这个需求,把895个结构体对应位置的cdfSR值提取出来并计算平均值:
方法1:Cell数组中转(直观好理解)
先把每个结构体的cdfSR字段捞出来存到cell数组,再转成矩阵,最后按列求平均就行:
% 提取所有cdfSR到cell数组 cdfSR_cell = {CDF(:).cdfSR}; % 把cell里的1×48数组按行拼接成895×48的矩阵 cdfSR_matrix = vertcat(cdfSR_cell{:}); % 对每一列求平均,得到1×48的结果 avg_cdfSR = mean(cdfSR_matrix, 1);
方法2:直接拼接(更简洁)
不用cell数组中转,直接用cat函数把所有cdfSR按行拼起来:
% 一步拼成895×48矩阵 cdfSR_matrix = cat(1, CDF(:).cdfSR); % 按列求平均 avg_cdfSR = mean(cdfSR_matrix, 1);
方法3:低内存开销版(适合超大数据集)
如果你的结构体数组特别大,生成完整矩阵占内存太多,那就逐位置计算:
avg_cdfSR = zeros(1, 48); for idx = 1:48 % 把所有结构体的第idx个值拼成数组,再求平均 avg_cdfSR(idx) = mean([CDF(:).cdfSR(idx)]); end
这里[CDF(:).cdfSR(idx)]会自动把895个标量拼成一个行向量,mean一下就得到对应位置的平均值了。
顺便说下为啥原来的写法报错:当你用CDF(:).cdfSR(1)时,MATLAB会返回895个单独的标量,但你没告诉它要把这些值收集起来(比如用数组或cell接收),所以它就会报错说“Expected one output...”。上面的方法都是帮你把这些零散的值打包成可计算的数组~
内容的提问来源于stack exchange,提问作者JJB
相关产品推荐
相关产品推荐

