nnz(cellfun(@(S) ismember('3',S), sprintfc('%4d',floor(A*10000))))
Finding how mych values contain a specific number in a matrix
1 view (last 30 days)
Show older comments
Lola Rapoport
on 20 Apr 2018
Commented: Walter Roberson
on 20 Apr 2018
I built the next matrix:
A=rand(100, 100)
I need to find how much values contain '3' in the first four digits. I would like to know how to do that.
0 Comments
Accepted Answer
Walter Roberson
on 20 Apr 2018
2 Comments
Walter Roberson
on 20 Apr 2018
The '%4d' could be just '%d' here.
But if you were searching for 0's then you should use '%04d'
Walter Roberson
on 20 Apr 2018
B14 = floor(A*10000); D4 = mod(B14, 10); B13 = (B14-D4)/10; D3 = mod(B13, 10); B12 = (B13-D3)/10; D2 = mod(B12, 10); D1 = (B12-D2)/10; nnz( any([D1(:), D2(:), D3(:), D4(:)] == 3, 2) )
More Answers (1)
David Fletcher
on 20 Apr 2018
Edited: David Fletcher
on 20 Apr 2018
Whilst I can admire the brevity of Walter's code, I might be inclined to use a more 'conventional' alternative
A=rand(100, 100);
extract=A; count=0; for iter=1:4 %Prepare integer value for examination extract=extract*10; %remove fractional part intVals=floor(extract); %running total of '3's in each column count=count+sum(intVals==3); %subtract integer portion ready for next loop extract=extract-intVals; %Remove numbers where 3 has been found extract(intVals==3)=0; end
total=sum(count);
0 Comments
See Also
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!