using arrayfun for a function with multiple inputs

7 vues (au cours des 30 derniers jours)
Michael
Michael le 26 Jan 2014
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]);

Réponse acceptée

Matt J
Matt J le 26 Jan 2014
Modifié(e) : Matt J le 26 Jan 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 commentaires
Matt J
Matt J le 26 Jan 2014
Modifié(e) : Matt J le 26 Jan 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....
Michael
Michael le 26 Jan 2014
ah thanks, it works now

Connectez-vous pour commenter.

Plus de réponses (1)

Andrei Bobrov
Andrei Bobrov le 26 Jan 2014
b1=0;
e1=20;
x = arrayfun(@(x1)Before(x1,b1,e1), your_structure)
  2 commentaires
Michael
Michael le 27 Jan 2014
Yes, this also works, thanks
Anik Hirenkumar Shah
Anik Hirenkumar Shah le 27 Fév 2020
this worked for me as well. Thanks

Connectez-vous pour commenter.

Catégories

En savoir plus sur Parallel for-Loops (parfor) dans Help Center et File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by