Counting values above a threshold within a matrix.

46 vues (au cours des 30 derniers jours)
Gareth Evans
Gareth Evans le 17 Sep 2012
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 commentaire
Azzi Abdelmalek
Azzi Abdelmalek le 17 Sep 2012
Modifié(e) : Azzi Abdelmalek le 17 Sep 2012
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

Connectez-vous pour commenter.

Réponse acceptée

Greg
Greg le 17 Sep 2012
sum(myMat>0, 2)
the result is the number of values in each row > 0.
  3 commentaires
Gareth Evans
Gareth Evans le 17 Sep 2012
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 le 17 Sep 2012
Wonderful. Thankyou..(-:

Connectez-vous pour commenter.

Plus de réponses (2)

Babak
Babak le 17 Sep 2012
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 commentaire
Gareth Evans
Gareth Evans le 17 Sep 2012
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.

Connectez-vous pour commenter.


nah
nah le 17 Sep 2012
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

Catégories

En savoir plus sur Configure and View Diagnostics dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by