Azzera filtri
Azzera filtri

How do I use 'ErrorHandler' in arrayfun?

2 visualizzazioni (ultimi 30 giorni)
Michael
Michael il 15 Gen 2014
Commentato: Michael il 25 Gen 2014
x = arrayfun(@(x) mean(x.Num(1:20,3)), Struct, 'UniformOutput', false)
Struct is a 1x45 structure containing a field called Num, which is an array of integers.
I want to take the mean of the first 20 numbers in the third column pf each of the 45 Num fields, but the problem is that a few of the Num fields have fewer than 20 rows. So when I try to run this, Matlab gives me an error saying "Index exceeds matrix dimensions"
How can I use the ErrorHandler to make the mean = 0 when Num has fewer than 20 numbers in the third column?

Risposta accettata

Jacob Halbrooks
Jacob Halbrooks il 15 Gen 2014
Rather than use ErrorHandler here, consider writing your logic into a function that acts on a scalar struct. This function would check the input struct's Num field size to determine whether to return a mean calculation or 0. Here is an example:
function v = meanMyStruct(s)
sNum = s.Num;
if size(sNum,1) >= 20
v = mean(sNum(1:20,3));
else
v = 0;
end
Now you can use this function with ARRAYFUN on your struct array:
s = struct('Num',{rand(20,5), rand(19,5), rand(21,5)});
out = arrayfun(@meanMyStruct, s)
  3 Commenti
Jacob Halbrooks
Jacob Halbrooks il 16 Gen 2014
Using the first data as an example:
sNum = [1 2 4; 17 4 6; 19 9 8; 25 10 18];
You can then get just the first column and create a logical mask of the rows that fit your condition:
firstColumn = sNum(:,1);
rowsUnder20 = firstColumn <20;
Now you can use the logical mask to select just the data you want:
sNumNew = sNum(rowsUnder20,:);
disp(sNumNew)
1 2 4
17 4 6
19 9 8
So now just take the mean of the third row of sNumNew:
mean(sNumNew(:,3))
Michael
Michael il 25 Gen 2014
thank you very much, that works perfectly.

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Raspberry Pi Hardware in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by