Is there a better way to use cellfun with arguments? and is it better than for-loop?
6 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
ytzhak goussha
el 8 de Sept. de 2021
Comentada: ytzhak goussha
el 9 de Sept. de 2021
Hey,
When I use cellfun, with a function that has arguments, I use repmat function to duplicate my arguments. My question is, if there is a better way to do this.
Here is an example
Lets say that I have a cell array of matricies and I want to get the size of dimention 1 in each
%Create a cell array with random values
randVal = @(x) magic(randi(5,2))
cellArr = arrayfun(randVal, ones(10,1),'uniformOutput',false);
%Get the size of the first dimention of each element in the cell aray
sizes = cellfun(@size,cellArr,repmat({1},size(cellArr,1),1));
This is the part that I am asking about:
repmat({1},size(cellArr,1),1)
Is there a better way to do this?
And in general, is this better that using a for-loop ?
2 comentarios
Rik
el 9 de Sept. de 2021
How is what you want different from what Steven posted in his answer? It seems to me that is what you need. Using an anonymous function is a better way than replicating data.
Respuesta aceptada
Jan
el 8 de Sept. de 2021
Editada: Jan
el 8 de Sept. de 2021
sizes = cellfun('size', cellArr, 1);
Using the CHAR vector arguments is mentioned in the documentation as "backward compatibility". This calling style is the only one, in which cellfun is faster than a simple loop.
4 comentarios
Rik
el 8 de Sept. de 2021
It looks like this should be possible, but your example is too contrived for me to see if this is what you mean:
arg2=1;
cellfun(@(arg1)size(arg1,arg2),cellArr);
I suspect this is what you need, but with size as the example it is hard to tell.
Jan
el 8 de Sept. de 2021
Editada: Jan
el 8 de Sept. de 2021
Rik's argument is important: If the cell contains e.g. strings, the 'size' command (as char vector) will fail.
I prefer loops. cellfun, arrayfun, structfun allow very compact code. But usually they are harder to read and to maintain. I like fast code also, but I've seen to many projects failing due to a too complex design which impedes the debugging. Therefore is prefer dull loops. The KISS style...
Más respuestas (1)
Ver también
Categorías
Más información sobre Matrices and Arrays en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!