Filter löschen
Filter löschen

Counting values above a threshold within a matrix.

51 Ansichten (letzte 30 Tage)
Gareth Evans
Gareth Evans am 17 Sep. 2012
Kommentiert: Emmagnio Desir am 5 Sep. 2023
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 Kommentar
Azzi Abdelmalek
Azzi Abdelmalek am 17 Sep. 2012
Bearbeitet: Azzi Abdelmalek am 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

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

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

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Babak
Babak am 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 Kommentar
Gareth Evans
Gareth Evans am 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.

Melden Sie sich an, um zu kommentieren.


nah
nah am 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

Kategorien

Mehr zu Configure and View Diagnostics finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by