Finding how mych values contain a specific number in a matrix

조회 수: 1 (최근 30일)
Lola Rapoport
Lola Rapoport 2018년 4월 20일
댓글: Walter Roberson 2018년 4월 20일
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.

채택된 답변

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

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

David Fletcher
David Fletcher 2018년 4월 20일
편집: David Fletcher 2018년 4월 20일

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); 

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by