如何将matlab逻辑函数与数组一起使用

时间:2014-03-27 13:58:17

标签: arrays matlab

我正在使用Matlab。

我将零数组A与其他一些数组(例如[1 1 0 0]

进行比较

我写下面的代码:

A=[0 0 0 0];

if (A~=[1 1 0 0] & A~=[1 0 1 0] & A~=[1 1 0 1])
    x=1;
else
    x=0;
end

我希望看到x=1,但我得到的答案是x=0

我错了什么?

3 个答案:

答案 0 :(得分:1)

~=&是元素智能运算符,因此表达式

A~=[1 1 0 0] & A~=[1 0 1 0] & A~=[1 1 0 1]

其中A = [0 0 0 0]生成矢量输出:

[1 0 0 0]

对向量计算的if语句执行隐式all,在这种情况下会计算为false

目前还不清楚你想要什么,但是如果你想确保向量A不等于[1 1 0 0][1 0 1 0][1 1 0 1]中的任何一个,那么你需要这样做:

x = ~isequal(A, [1 1 0 0]) && ~isequal(A, [1 0 1 0]) && ~isequal(A, [1 1 0 1])

答案 1 :(得分:1)

matlab相等运算符比较数组元素并为每个元素返回true / false(逻辑1/0)。因此,如果你有A = [1 1 0 0], B = [1 0 1 0]并检查A == B,则不会得到'false',而是得到[1 0 0 1]。

如果要检查整个向量A和B是否相等,则需要检查条件是否正确 all(A==B)是否属实

答案 2 :(得分:0)

我认为你希望找到完全匹配,所以你可以使用它 -

%%// If *ANY* of the element-wise comparisons are not-true, give me 1,
%%// otherwise give me 0. Thus, in other words, I am looking to find the 
%%// exact match (element-wise) only, otherwise give me 1 as x.
if any(A~=[1 1 0 0] & A~=[1 0 1 0] & A~=[1 1 0 1]) 
    x=1;
else
    x=0;
end

另一种说法是 -

%%// *ALL* elementwise comparisons must be satisfied, to give x as 0, 
%%// otherwise give x as 1.
if all(A==[1 1 0 0] & A==[1 0 1 0] & A==[1 1 0 1]) 
    x=0;
else
    x=1;
end

获取有关此处使用的anyall的更多信息。