Counting values above a threshold within a matrix.

조회 수: 48 (최근 30일)
Gareth Evans
Gareth Evans 2012년 9월 17일
댓글: Emmagnio Desir 2023년 9월 5일
Hello,
Im looking at finding a way of counting values that are >0 from a matrix, for example:-
if true %if statement used to display matrix correctly
00100
01110
11111
01110
00100
end
Would provide the output 1,3,5,3,1. Any help would light up my day.
Cheers
Gareth
  댓글 수: 1
Azzi Abdelmalek
Azzi Abdelmalek 2012년 9월 17일
편집: Azzi Abdelmalek 2012년 9월 17일
is this your matrix?
0 0 2 0 0
0 3 4 5 0
1 2 3 4 5
0 6 5 4 0
0 0 3 0 0

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

채택된 답변

Greg
Greg 2012년 9월 17일
sum(myMat>0, 2)
the result is the number of values in each row > 0.
  댓글 수: 3
Gareth Evans
Gareth Evans 2012년 9월 17일
A little closer to the solution, for which i really appreciate.
Say the matrix is a 24X365 where 24 is equal to hours and 365 to days. This matrix contains values which relate to the intensity of sunlight hourly per day for 365 days.
How can i create an output from the matrix that will provide a matrix (1X365) with each cell in the matrix (1x365) containing values that exceed 0. or in other words how many hours a day sunlight per day?
I hope this makes the problem clearer as the code given above is outputting the wrong dimensions. and i cant seem to get the right solution by playing with it.
cheers guys.
Gareth Evans
Gareth Evans 2012년 9월 17일
Wonderful. Thankyou..(-:

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

추가 답변 (2개)

Babak
Babak 2012년 9월 17일
you can run the below function for each of your numbers:
function num_of_1s = no1(n)
if n==0
num_of_1s = 0;
else
length = floor(log10(n))+1;
num_of_1s = 0;
for j=length:-1:1
if floor(log10(n)) == j-1
num_of_1s = num_of_1s +1;
n = n-10^(j-1);
end
end
end
end
Then say for example:
no1(1010111)
which returns
5
  댓글 수: 1
Gareth Evans
Gareth Evans 2012년 9월 17일
I do apologise, I believe that the way i used to display the matrix using this forum editor might of caused a little confusion. I used the code tab to enable me to display the matrix as you would write down on a piece of paper.
00200 03450 12345 06540 00300 would be a 5x5 matrix.
Could you solve this problem with out an if loop?
with thanks.

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


nah
nah 2012년 9월 17일
A simple way is:
myMat =
0 0 2 0 0
0 3 4 5 0
1 2 3 4 5
0 6 5 4 0
0 0 3 0 0
[nrows,ncols] = size(myMat);
counts_above_0 = zeros(nrows,1);
for rx = 1:nrows
counts_above_0(rx,1) = length(find(myMat(rx,:)>0));
end

카테고리

Help CenterFile Exchange에서 Configure and View Diagnostics에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by