Finding how mych values contain a specific number in a matrix

2 visualizaciones (últimos 30 días)
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.

Respuesta aceptada

Walter Roberson
Walter Roberson el 20 de Abr. de 2018
 nnz(cellfun(@(S) ismember('3',S), sprintfc('%4d',floor(A*10000)))) 
  2 comentarios
Walter Roberson
Walter Roberson el 20 de Abr. de 2018
The '%4d' could be just '%d' here.
But if you were searching for 0's then you should use '%04d'
Walter Roberson
Walter Roberson el 20 de Abr. de 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) )

Iniciar sesión para comentar.

Más respuestas (1)

David Fletcher
David Fletcher el 20 de Abr. de 2018
Editada: David Fletcher el 20 de Abr. de 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); 

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by