条件语句比较:矩阵和数字

3
我有一个矩阵A = [0 4 5 3]和数字B=4。 现在我想要做以下操作。
if A<B
    disp('Something')
end

但是这样不行,Matlab 不会将矩阵和数字进行比较。我该怎么解决?
3个回答

4
Matlab将会比较一个矩阵(或者更为准确的说,是一个数组)与一个数值,得到的结果仅仅只是另一个数组(类型为“逻辑型”)。在iffor语句中进行布尔测试需要基于一个单一逻辑型变量进行操作。您需要通过使用any()(如果任何元素为true则返回true)或者all()(如果所有元素都为true则返回true)将您的逻辑型数组转换为一个单一数值。
例如:
if any(A<B)
    disp('Something');
end

想要更深入地了解正在发生的事情:

>> A = [0 4 5 3]; B = 4;
>> A < B
ans =
     1     0     0     1

>> any(A<B)
ans =
     1

>> all(A<B)
ans =
     0

0

对@EelkeSpaak的回答进行补充:

如果您想每次语句有效时重复执行某个操作,您可能需要以下脚本:

for ii=find(A<B)
    disp(num2str(A(ii)));
end

这取决于你想要实现什么。


0

A = [0 4 5 3]B=4的比较结果将是一个逻辑矩阵:

>> A = [0 4 5 3]
A =
     0     4     5     3
>> B=4
B =
     4
>> A<B
ans =
     1     0     0     1
>> class(A<B)
ans =
logical

当您在if语句中使用矩阵时,如果它非空且所有元素都非零,则会被视为真。

>> if A<B, disp('somthing'); end
>> B = 10
B =
    10
>> if A<B, disp('somthing'); end
somthing

所以这取决于您对此比较的期望行为。您可以使用其他函数,如allanyisequal


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接