如何对数组的数组进行平均?

我有一个大小相同的阵列
c
,即任何
n
size(c{n}) = [ m l ... ]
。如何在一次扫描中获得所有数组元素的
mean
值(对单元阵列索引求平均值
n
)?我想过使用
cell2mat
mean
但是前者并没有增加另一个维度,而是将ѭ7改变为
l*n
。手动循环当然需要永远......     
已邀请:
如果所有数组的大小都相同,那么将它们存储在矩阵而不是单元数组中会更有意义。这使得更容易在它们之间执行操作,比如采取平均值。您可以使用NDIMS和CAT功能将数据转换为矩阵:
dim = ndims(c{1});          %# Get the number of dimensions for your arrays
M = cat(dim+1,c{:});        %# Convert to a (dim+1)-dimensional matrix
meanArray = mean(M,dim+1);  %# Get the mean across arrays
    
如果您有更高版本的matlab,可以通过'cellfun'功能完成。这可以用不等大小的阵列处理细胞。
C = {1:10, [2; 4; 6], []};
Cmeans = cellfun(@mean, C)
Cmeans =
    5.5000    4.0000       NaN
参考: https://groups.google.com/forum/?fromgroups=#!topic/comp.soft-sys.matlab/S_hyHxy11f0     
你走在正确的轨道上。使用CELL2MAT将您的单元格数组转换为数值数组,然后使用RESHAPE构建三维矩阵。然后,您可以使用带有dimension参数的MEAN函数计算平均值: >> c = {[1 2 3; 4 5 6] [7 8 9; 12 13 14]} c =     [2x3双] [2x3双] >> mean(reshape(cell2mat(c),[2,3,2]),3) ans =      4 5 6      8 9 10     
我找到了一种在以下链接上查找Cell数组中的平均值的简单方法: http://www.gomatlab.de/cellfun-t25114.html 愿
x
成为牢房。然后:
var_mean = cellfun(@mean, x, 'UniformOutput', false); %columnwise mean value


var_mean = cellfun(@(in) mean(in(:)), x); %% mean value of the total "subcell"
    
这只是循环遍历单元格并意味着向下直到它是一个单例。它不需要那么长时间,这是4000万个浮子被摧毁,需要1秒钟。
function n = big_mean
tic
c = cell(1000);

for ii = 1:length(c)
    c{ii} = rand(8,7,6,5,4,3,2);
end

n = all_cells(c);
toc
end

function n = all_cells(c)

n = zeros(length(c),1);
for ii = 1:length(c)
    n(ii) = cell_mean(c{ii});
end

n = mean(n);
end

function n = cell_mean(n)

while length(size(n))~=2
    n = mean(n);
end

end

Elapsed time is 1.042459 seconds.

ans =

    0.4999
    
感谢您的其他评论,但有时,很难重新排列数据或更改它们的保存方式。对于那些有这个问题的人来说,这就是解决方案,享受。
a=0;
MyCellAddFun=@(Input) a*eye(size(Input))+Input;
temp=arrayfun(@(ind) MyCellAddFun(CellData{ind}),1:length(CellData),'uniformoutput',false);
answer=temp{end}
    

要回复问题请先登录注册