matlab - Matlab中根据两个条件对元胞数组的元素进行计数

标签 matlab count cell conditional-statements

我有以下元胞数组:

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的是两列中的第一个和第二个有效数字。顺便说一句,您帖子中的输出应该是 23

我之前已经回答过你的一系列问题,所以如果我没记错的话,第一行包含标题。因此,为了确保事物的一致性,请确保访问第二行以及每列之后的条目。这可确保您查看的不是标题而是数字数据。换句话说,为了安全起见,请执行以下操作:

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/

相关文章:

Matlab:为多个序列创建循环

mysql - mysql 统计具有特定评级的餐厅

swift - 将最后一个 tableView 单元格设置为 Swift 中可变单元格中的常量单元格

r - 获取一个点(栅格)距离内的单元格数量

ios - UITableView - UITableViewCell.Style .subtitle - 如何使 UIImageView 圆形? - swift 5

matlab - 索贝尔面具的困惑

matlab - 关于 MATLAB 的快速绘图问题

matlab - 如何将非常大的 MATLAB 稀疏矩阵保存到文本文件中?

mysql - 如何为订单及其项目编写自定义 MySQL 选择查询

mysql - 如何从 MYSQL 表中正确选择唯一用户的分组值计数(参见示例)