如何计算满足特定案例的条目数?

时间:2012-10-12 16:39:00

标签: matlab

A=[1 2 3 4 5 0 0 0 0 0 0 0 0 0 0 0 0;
   0 1 2 3 4 5 0 0 0 0 0 0 0 0 0 0 0;
   0 0 0 1 2 3 4 5 0 0 0 0 0 0 0 0 0; 
   0 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5;
   0 0 0 0 0 0 0 1 2 3 4 5 0 0 0 0 0;
   0 0 0 0 0 0 0 1 2 3 4 5 0 0 0 0 0];

在列中只计算数字“1”的代码是什么,只有元素的值大于1且小于4.

注意:忽略零。

因此,我的预期输出为res = 1,仅在第二列。

以下是我的尝试:

res = sum( sum(A(2 :end,all(A>1&A<4))==1, 2),1 );

但我的代码中仍然计算零。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你可以这样做:

首先查找违反第一条规则的所有列A我的元素不大于4

[~, del, ~] = find(A>=4)

删除这些列:

A(:, unique(del)) = []

给出了:

 A =
 1     2     3     0     0     0     0     0
 0     1     2     0     0     0     0     0
 0     0     0     0     0     0     0     0
 0     0     0     0     0     1     2     3
 0     0     0     2     3     0     0     0
 0     0     0     2     3     0     0     0

现在我们找到所有剩余的列1

[~, c1, ~] = find(A == 1);

在第二个要求之后,所有至少有一个值大于1的列:

[~, c2, ~] = find(A > 1)

这些带有列号的c1c2矢量我们只需相交并计算:

numel(intersect(c1, c2))

现在这个论坛上有很多Matlab向导,我的直觉告诉我有更好的答案,所以也许你应该等一下。