结构Matlab

时间:2018-02-20 12:10:09

标签: matlab matrix data-structures concatenation cell-array

在Matlab中,我有一个大小为AVG的结构1 x 6,其中有一个字段averageNEST,它是一个大小为1 x 6的单元格数组。

每个averageNEST包含不同大小的矩阵(在一个维度上),例如

AVG(1).averageNEST{1,1}的大小为281 x 3 x 19

AVG(1).averageNEST{1,2}的大小为231 x 3 x 19

矩阵的第二维和第三维总是3和19,它只是第一个可以改变的维度。

我希望对AVG(1).averageNEST中包含的所有矩阵求平均值,并获得一个大小为X x 3 x 19的矩阵,其中X是AVG(1).averageNEST中最小矩阵的大小。

然后我想对averageNEST中的所有6 AVG执行此操作 - 因此AVG(1), AVG(2) ... AVG(6)有一个单独的平均矩阵。

我尝试过多种方法,包括尝试使用以下代码连接矩阵:

 for i=1:6
    min_epoch = epoch + 1;
         for ii=1:19
            averageNEST(:,:,ii) = [AVG(i).averageNEST(1:min_epoch,:,ii)];
         end
 end

然后对此进行平均但是它不起作用,现在我对我正在做的事情感到困惑!

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

我不确定我是否理解你想做什么。如果您只想保留最小矩阵大小的元素,然后平均这些矩阵,您可以执行以下操作:

averageNEST = cell(size(AVG)); 
for iAVG = 1:numel(AVG)
    nests = AVG(iAVG).averageNEST;
    minsize = min(cellfun(@(x) size(x,1), nests));    
    reducednests = cellfun(@(y) y(1:minsize, :, :), nests, 'UniformOutput', false);
    averageNEST{iAVG} = sum(cat(4, reducednests{:}), 4) / numel(nests);
end