我有以下元胞数组:
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}
我只想计算 A(:,3)<25
所在的行和A(:,5)>25
,所以我会得到输出:
Output={2}
我尝试过这个:
sum(cell2mat(A(:,3))<25 & cell2mat(A(:,5))>25)
但是要使用&
输入的大小必须相同。
最佳答案
你的语法是正确的。我不明白为什么你会收到错误。让我们将声明的每个部分分解为单独的声明:
b1 = cell2mat(A(:,3)) < 25
b1 =
1
1
0
0
1
1
b2 = cell2mat(A(:,5)) > 25
b2 =
1
1
1
1
0
0
c = b1 & b2
c =
1
1
0
0
0
0
a = sum(c)
a = 2
答案应该是2
,这是正确的。使用 cell2mat
转换每一列时,第一行会被忽略,因为它是空的,因此您会得到一列包含 6 个元素而不是 7 个元素的列。因此,这将自动从第二行开始并向前。满足上述条件的仅有两行,其中第三行小于25且第五行大于25的是两列中的第一个和第二个有效数字。顺便说一句,您帖子中的输出应该是 2
和 3
。
我之前已经回答过你的一系列问题,所以如果我没记错的话,第一行包含标题。因此,为了确保事物的一致性,请确保访问第二行以及每列之后的条目。这可确保您查看的不是标题而是数字数据。换句话说,为了安全起见,请执行以下操作:
a = sum(cell2mat(A(2:end,3)) < 25 & cell2mat(A(2:end,5)) > 25);
无论如何,如果你想获取满足上述条件的有效行,请使用 find
然后偏移 1
来跳过第一行,就像我们想要的那样忽略原始元胞数组中两列的标题。换句话说:
ind = find(cell2mat(A(2:end,3)) < 25 & cell2mat(A(2:end,5)) > 25) + 1
ind =
2
3
关于matlab - Matlab中根据两个条件对元胞数组的元素进行计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24986576/