我有以下矩阵
A=[ 1 2 3 4 5 6 7;
3 4 5 6 8 9 1;
3 4 2 5 6 7 8]
如何找出第一行中有多少元素,其值在>2 & <6
范围内?
答案 0 :(得分:0)
如果我理解帐户的含义,如果您想要符合条件的find
元素:
B = A(1,:)
find(B > 2 & B < 6)
或一行:
find(A(1,:) > 2 & A(1,:) < 6)
您还必须知道find
为您提供了 indices ,而不是满足给定逻辑表达式的数组的实际元素。
答案 1 :(得分:0)
您需要使用矢量化计算来考虑矩阵。 (在这里使用find不是一个好的解决方案,因为它没有矢量化以在行上独立运行。)
首先,如果您尝试测试会发生什么,A&gt; 2,在MATLAB中?试试吧!
A=[ 1 2 3 4 5 6 7;
3 4 5 6 8 9 1;
3 4 2 5 6 7 8];
>> A > 2
ans =
0 0 1 1 1 1 1
1 1 1 1 1 1 0
1 1 0 1 1 1 1
MATLAB生成一个逻辑数组,如果A的元素大于2,则为true。类似地,如果我们键入A&lt; 6,我们得到另一个逻辑数组。
>> A < 6
ans =
1 1 1 1 1 0 0
1 1 1 0 0 0 1
1 1 1 1 0 0 0
如果我们将两个op组合成一个表达式怎么办?
>> (A > 2) & (A < 6)
ans =
0 0 1 1 1 0 0
1 1 1 0 0 0 0
1 1 0 1 0 0 0
好的,所以这个数组告诉我们两个子表达式都是真的。请注意,我们可以使用sum和其他算术运算来操作逻辑数组。
>> sum((A > 2) & (A < 6),2)
ans =
3
3
3
因此,上面的表达式计算满足每行目标的元素数量,并且速度非常快。学会使用MATLAB,因为它应该被使用。你的代码会变得更好。