3

我在 MATLAB 中有一个代码,它在运行十次的循环中生成 1000 x 1000 数组;为了尝试保存所有这些循环,我将这些数组提交到一个单元格;现在我有一个名为 PL 的 1 x 10 单元格,每个元素都是一个 1000 x 1000 数组;我想以最简单的方式对它们求和,以便得到一个 1000 x 1000 的输出。我试过使用

PLtot = cellfun(@sum,PL, 'UniformOutput',false);

但这对我来说根本不起作用 - 有什么想法吗?我敢肯定这应该很简单,但是做起来头疼!

4

3 回答 3

4

而不是将您的数组存储到 cellarray 中。

只需为您的初始数组添加一个额外的维度。始终将大小预分配给数组。

PL = zeros(1000,1000,10);

因此,当您想要访问每个图像时,它会更容易。总而言之:

PLtot = sum(PL,3);
于 2013-12-04T18:13:53.550 回答
3

以下对我有用:

PLtot =  sum(cat(3,PL{:}),3);

它连接第三维中的数组,然后简单地沿该维求和。

于 2013-12-04T18:30:54.410 回答
0

你的代码没有错,所以你不应该得到错误。我想你只是对结果不满意。

cellfun为您返回按列求和向量的单元格数组,每一个都是将 sum 函数应用于单个单元格的结果。您只需要将其转换为矩阵。

PLtotcell = cellfun(@sum,PL, 'UniformOutput',false); % 
PLtot = cell2mat(PLtotcell');

我不得不说,在你的情况下,这不是最有效的方法。检查其他答案以获得更好的性能。我只是想让你了解你的代码是如何工作的。

于 2013-12-04T18:36:27.880 回答