我正在使用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
我错了什么?
答案 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