Hello,
I'm trying to set up a function for cells using cellfun inside a parfor loop. A simplified example seen below:
%Main function
function main M = rand(100,100); N = rand(100,100); const = rand(100,1); %Does not change during parfor loop
parfor i=1:size(M,2) X = num2cell( M(:,i),1 ); Y = num2cell( N(:,i),1 ); Z = cellfun(@(x,y) nestedFunc(const,x,y), X,Y, 'uniformoutput',0 ); end %Nested function
function z = nestedFunc(const,x,y) %Do a bunch of stuff...
end end
However, using
Z = cellfun(@(x,y) nestedFunc(const,x,y), X,Y, 'uniformoutput',0 );
is not allowed inside parfor: " The nested function 'nestedFunc' cannot be called within a PARFOR loop".
I've read that you can use the feval and the handle to the function to get around this, like this (from Matlab documentation):
function A = pfeg function out = nfcn(in) out = 1 + in; end fcn = @nfcn; parfor idx = 1:10 A(idx) = feval(fcn, idx); end end
I do not manage to do this when my function is a cellfun however. I can get around the issue by defining nestedFunc in a separate .m file, but I would prefer if it could be done inside the function itself. (Also, I don't know if calling a separate function takes more time compared to a nested function?)
Can anyone please advice me? Thank you!
Best Answer