Finding frequency of values in an array
59 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Ahmad Alenezi
am 23 Jul. 2019
Kommentiert: Dyuman Joshi
am 26 Jul. 2023
Hi there
I have a 128x128x16 double array. Firstly, I would like to get the total number of values < zero in this array. Then, i would like to get the sum of the frequency of occurance of each value in this array. The array name is Phase.
thanks
0 Kommentare
Akzeptierte Antwort
Star Strider
am 23 Jul. 2019
One approach:
negPhase = nnz(Phase < 0); % Number Of Values < 0
[uPhase,ia,ic] = unique(Phase);
tally = accumarray(ic, 1);
freqOccurrence = [uPhase, tally]; % Frequency Of Occurrenct Of Each Value
If you do not want the results sorted (since the unique function does this by default), use:
[uPhase,ia,ic] = unique(Phase, 'stable');
instead. The rest of the code is unchanged. (Note that this will conform to the MATLAB linear matrix indexing convention, so it will be a column vector, not a matrix.)
5 Kommentare
Leyla Elyasizad
am 26 Jul. 2023
Hey Guys
Thanks for your helpful comments but I tried both unique & tabulate for double values with 4 decimal places (0.0202, 0.0031,.....) and with both functions I get two 0.0031 with differenct occurence!
Do you have any idea why this happens?
Dyuman Joshi
am 26 Jul. 2023
@Leyla Elyasizad, because both numbers do not appear to be the same. See below -
%Assign 0.3
y = 0.3
%Value st
sprintf('%0.42f', y)
When trying to compare floating point numbers, it is better to use a tolerance.
y = 0.12230455
sprintf('%0.42f', y)
%Set tolerance of 10^-6
tol = 1e-6;
%%Comparison
%Using equality
isequal(y,0.12330455)
%Using a tolerance
abs(y-0.12230455)<tol
Weitere Antworten (1)
Siehe auch
Kategorien
Mehr zu Logical finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!