Count elements of a cell array based on two conditions
    3 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
    Maria
 am 27 Jul. 2014
  
    
    
    
    
    Beantwortet: Azzi Abdelmalek
      
      
 am 28 Jul. 2014
            I have the following cell array:
A={'x' 2000  []  2001  []
26  61      21   157     104
41  98      18   76      60
125  20  33  20  33
143  157  104  157  104
172  61  21  61  21
177  559  10  559  13}
I would like to count only the cases in which A(:,3)<25 and A(:,5)>25, so I would get as output:
Output={2}
I tried this:
sum(cell2mat(A(:,3))<25 & cell2mat(A(:,5))>25)
but to use '&' inputs must have the same size.
Can someone help me? Thank you.
2 Kommentare
Akzeptierte Antwort
  Azzi Abdelmalek
      
      
 am 28 Jul. 2014
        out=nnz(cellfun(@(x,y) all([x<25,y>25]),A(2:end,3),A(2:end,5)))
0 Kommentare
Weitere Antworten (2)
  Geoff Hayes
      
      
 am 27 Jul. 2014
        Maria - you can try the following
 length(find(cell2mat(A(:,3))<25 & cell2mat(A(:,5))>25))
We convert the third and fifth columns of A to vectors using cell2mat and then find which indices from both vectors satisfy the two conditions.  length is then used to do the the count.
2 Kommentare
  Geoff Hayes
      
      
 am 27 Jul. 2014
				Given this error, it would seem as if the two columns, cellmat(A(:,3)) and cellmat(A(:,5)) are of different dimension. Are both these columns just like in the above matrix?
 A(:,3) =
    []
    [ 21]
    [ 18]
    [ 33]
    [104]
    [ 21]
    [ 10]
 A(:,5) = 
    []
    [104]
    [ 60]
    [ 33]
    [104]
    [ 21]
    [ 13]
During the cell2mat conversion, the empty elements are removed. I wonder if perhaps your two columns have a different number of empty elements, [], so that after the conversion, the two columns are of a different dimension.
  Image Analyst
      
      
 am 27 Jul. 2014
        Another option to count rows meeting the criteria:
theCount = sum(cell2mat(A(:,3)) < 25 & cell2mat(A(:,5)) > 25)
3 Kommentare
  Image Analyst
      
      
 am 27 Jul. 2014
				Here's the exact code I used and it works fine:
A = {'x' 2000  []  2001  []
26  61     21   157    104
41  98     18   76     60
125  20  33  20  33
143  157  104  157  104
172  61  21  61  21
177  559  10  559  13}
theCount = sum(cell2mat(A(:,3)) < 25 & cell2mat(A(:,5)) > 25)
Post your adaptation of my code so I can see what you changed and see how you broke it.
Siehe auch
Kategorien
				Mehr zu Resizing and Reshaping Matrices 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!



