我在MATLAB中有一个代码,它在一个运行十次的循环中产生1000 x 1000个数组;为了尝试保存所有这些循环,我将这些数组提交给一个单元格;现在我有一个1 x 10单元格的单元格,每个元素都是一个1000 x 1000的数组;我想以最简单的方式对这些进行求和,以便得到一个1000 x 1000的输出。我尝试过使用
PLtot = cellfun(@sum,PL, 'UniformOutput',false);
但这对我来说根本不起作用 - 任何想法?我确信这应该很简单,但要头疼呢!
答案 0 :(得分:4)
而不是将数组存储到cellarray中。
只需在初始数组中添加额外的维度即可。始终将大小预先分配给数组。
PL = zeros(1000,1000,10);
因此,当您想要访问每个图像时,它会更容易。总而言之:
PLtot = sum(PL,3);
答案 1 :(得分:3)
以下适用于我:
PLtot = sum(cat(3,PL{:}),3);
它在第三维中连接数组,然后简单地沿着这个维度求和。
答案 2 :(得分:0)
您的代码没有错,所以您不应该收到错误。我想你只是对结果不满意。
cellfun
返回列向量和向量的单元格数组,每个向量都是将sum函数应用于单个单元格的结果。您只需将其转换为矩阵即可。
PLtotcell = cellfun(@sum,PL, 'UniformOutput',false); %
PLtot = cell2mat(PLtotcell');
我必须说这不是你案件中最有效的方法。检查其他答案以获得更好的性能我只是想让你了解你的代码是如何工作的。