Count elements of a cell array based on two conditions

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.

 채택된 답변

Azzi Abdelmalek
Azzi Abdelmalek 2014년 7월 28일
out=nnz(cellfun(@(x,y) all([x<25,y>25]),A(2:end,3),A(2:end,5)))

추가 답변 (2개)

Geoff Hayes
Geoff Hayes 2014년 7월 27일
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

It gives this error: Error using & Matrix dimensions must agree.
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
Image Analyst 2014년 7월 27일
Another option to count rows meeting the criteria:
theCount = sum(cell2mat(A(:,3)) < 25 & cell2mat(A(:,5)) > 25)

댓글 수: 3

It gives the same error, Error using & Matrix dimensions must agree.
That's what I had already tried.. :(
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.

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

카테고리

도움말 센터File Exchange에서 Resizing and Reshaping Matrices에 대해 자세히 알아보기

질문:

2014년 7월 27일

답변:

2014년 7월 28일

Community Treasure Hunt

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

Start Hunting!

Translated by