using arrayfun for a function with multiple inputs
7 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Michael
el 26 de En. de 2014
Comentada: Anik Hirenkumar Shah
el 27 de Feb. de 2020
I want to call my Before function with a 1 x 40 structure called struct for the s input, a value of 0 for the begins input, and a value of 20 for the ends input, but I can't figure out how to make it work with arrayfun correctly.
Here's what I have now, and the error that it gives me is at the bottom:
x = arrayfun(@Before, [struct,0,20]);
function v = Before(s,begins,ends)
Numbers = s.H;
firstColumn = Numbers(:,1);
rowsUnder = (firstColumn>begins)&(firstColumn<ends);
sNumNew = Numbers(rowsUnder,:);
v = mean(sNumNew(:,3));
end
Error using horzcat
The following error occurred
converting from double to
struct:
Error using struct
Conversion to struct from double
is not possible.
Error in ComparingMeans (line 22)
x = arrayfun(@Before,[struct,0,20]);
0 comentarios
Respuesta aceptada
Matt J
el 26 de En. de 2014
Editada: Matt J
el 26 de En. de 2014
Multiple arrayfun arguments should not be concatenated. You need to do
x = arrayfun(@Before, myStructure, 0 , 20);
Since "struct" is also the name of a built-in MATLAB function, you will minimize coding hazards if you use a different name for it, like I did.
3 comentarios
Matt J
el 26 de En. de 2014
Editada: Matt J
el 26 de En. de 2014
Instead of passing scalars for 0 and 20, you'll have to pass vectors of the same length as myStructure
d=size(myStructure);
a=zeros(d);
b=a;
b(:)=20;
x = arrayfun(@Before, myStructure, a, b);
That's very strange. I thought arrayfun did scalar expansion. That might be only for gpuArrays....
Más respuestas (1)
Andrei Bobrov
el 26 de En. de 2014
b1=0;
e1=20;
x = arrayfun(@(x1)Before(x1,b1,e1), your_structure)
2 comentarios
Ver también
Categorías
Más información sobre Structures 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!