Matlab 高效地查找每个单元数组元素的最大值

Matlab 高效地查找每个单元数组元素的最大值,matlab,Matlab,例如,我们有一个3x5单元数组,其中每个元素都是一个矩阵。我们能否找到每个单元元素的最大值,即矩阵,并将相应的值存储在新的3x5矩阵中?所有这些都没有for循环。贝娄有一种天真的方式 例如: a = rand(5,6); b = rand(7,6); c = rand(7,9); d = rand(27,19); CellArray = cell(2,2); CellArray{1}=a; CellArray{2}=b; CellArray{3}=d; CellArray{4}=c; MaxR

例如,我们有一个3x5
单元
数组,其中每个元素都是一个矩阵。我们能否找到每个单元元素的最大值,即矩阵,并将相应的值存储在新的3x5矩阵中?所有这些都没有for循环。贝娄有一种天真的方式

例如:

a = rand(5,6);
b = rand(7,6);
c = rand(7,9);
d = rand(27,19);
CellArray = cell(2,2);
CellArray{1}=a;
CellArray{2}=b;
CellArray{3}=d;
CellArray{4}=c;

MaxResults = nan(size(CellArray));
for i=1:numel(size(CellArray))
    MaxResults(i) = max(max(CellArray{i})); 
end

多谢各位

不能保证效率更高(直到Matlab决定对其进行多线程处理),但您可以像这样使用
cellfun

MaxResults = cellfun(@(x)max(x(:)), CellArray)

不能保证效率会更高(直到Matlab决定对其进行多线程处理),但您可以像这样使用
cellfun

MaxResults = cellfun(@(x)max(x(:)), CellArray)

请注意,在您的代码中,您可以将
max(max(ceralray{i}))
替换为
max(ceralray{i}(:)
(如@Jonas的回答中所示),这可能很快,所以我高度怀疑您是否希望您的循环转到
numel(size(ceralray))
,而只是
numel(ceralray)
是的。@Dan LuisMendo:
max(max)(CellArray{i})
对于大型输入实际上比
max(CellArray{i}(:)
快。请注意,在您的代码中,您可以用
max(max(max(CellArray{i}))
替换
max(CellArray{i}(:)
(如@Jonas的回答),这可能更快,所以我非常怀疑您是否希望循环转到
numel(size(ray))
但更确切地说是
numel(CellArray)
是的,丹。@LuisMendo:
max(max(CellArray{i}))
对于大输入来说,实际上比
max(CellArray{i}(:)
快。