samer@4: function Y=cellzip(fn,varargin) samer@4: % cellzip - Zip cell arrays with a function samer@4: % samer@4: % cellzip :: ( samer@4: % (D1,...,Dn)->R ~ function of n arguments, samer@4: % {[size]->D1}, ..., {[size]->Dn} ~ n cell arrays of appropriate types samer@4: % ) -> {[size]->R} ~ cell array of results samer@4: samer@4: % preallocate to fix size samer@4: sizes=cellmap(@size,varargin); samer@4: sz=sizes{1}; samer@4: for i=1:nargin-1 samer@4: if ~all(sizes{i}==sz), error('Sizes do not match'); end samer@4: end samer@4: samer@4: Y=cell(sz); samer@4: samer@4: for i=1:prod(sz) samer@4: args=cellmap(@(c)c{i},varargin); samer@4: Y{i}=feval(fn,args{:}); samer@4: end samer@4: samer@4: