按元素对 R x 1 元胞数组中的 M x N x P 数组求和

Sum M x N x P arrays in a R x 1 cell array element by element

我有一个 R x 1 元胞数组(R 是行数),其中每个条目都是一个 M x N x P 数组。如何对元胞数组中的每个数组求和,以便将每个条目添加到每个 M x N x P 数组中?我可以用 cellfun 来做吗?

我在类似的问题中发现了这个 method,但它 returns 一个 1 x N x P 数组而不是 M x N x P 数组(参见 B)或我收到错误 "Error using cell2mat Too many input arguments"(请参阅 C)。

M = 3;
N = 2;
P = 4;

A{1,1} = ones(M,N,P);
A{1,2} = 2*ones(M,N,P);
A{1,3} = 3*ones(M,N,P);

B = sum([A{:}]);
C = sum(cell2mat(A{:}),1);

我希望得到一个 M x N x P 数组,但其中每个元素都是每个单元格条目的 i、j、k 位置中所有元素的总和。

B(1,1) = 6  % for all entries

为什么首先要有元胞数组?你可以把所有等尺寸的三维数组存储到一个4维数组中,然后你想要的只是第四维的总和。

如果您确实需要元胞数组,请先沿第四维连接以创建 4D 数组,然后求和:

result = sum(cat(4, A{:}), 4);

如果您需要将元胞数组 串联成一个 4 维数组,但由于内存不足而出现错误,您可能需要求助于循环:

result = zeros(size(A{1}));
for k = 1:numel(A)
    result = result + A{k};
end

您不能使用 cellfun,至少不能以自然的方式使用,因为 cellfun 将函数应用于 每个单元格 ,而您想要应用所有单元格的每个条目的函数(求和)。