2
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 且小于 4 的元素的列中计算数字“1”的代码是什么。

注意:零被忽略。

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

这是我尝试过的:

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

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

4

1 回答 1

1

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

首先查找所有违反第一条规则的列,即Amy 的元素不大于 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 向导,我的直觉告诉我有更好的答案,所以也许你应该稍等一下。

于 2012-10-12T19:45:40.530 回答