我正在写一个简单的IF条件。该功能是将矩阵的每一行判断为某些向量。代码如下:
if (compareM(i,:)==[1, 0])||(compareM(i,:) ==[2, 1])
match_1 = match_1 +1;
else
mismatch_1 = mismatch_1 +1;
end
错误说''操作数到||和&&运算符必须可转换为逻辑标量值''。
compareM是一个n乘2的矩阵,我想知道错误是否由||产生操作。提前谢谢!
答案 0 :(得分:1)
compareM(i, :)
求值为1x2数值数组,因此compareM(i,:)==[1, 0]
求值为1x2逻辑数组。对于||
符号右侧的表达式也是如此。但是在||
的每一侧都需要一个逻辑值,而不是1x2逻辑值数组。
如果你希望这个表达式在==
的lhs上的值与rhs上的相应元素相同时求值为true,则在每一边包裹all()
:
all(compareM(i,:)==[1, 0]) || all(compareM(i,:) ==[2, 1])
答案 1 :(得分:1)
如果要比较矢量而不是标量值,则必须使用|
运算符。因此,您可以获得逐元素成对比较的逻辑向量。要在IF语句中使用它,您必须将每个逻辑语句(然后使用||
)或|
的结果转换为带有ALL,ANY或其他函数的标量。
如果要与向量进行比较,请使用ISEQUAL函数作为
if isequal(compareM(i,:)==[1, 0]) || isequal(compareM(i,:)==[2, 1])
答案 2 :(得分:0)
if ((compareM(i,:)==[1, 0])||(compareM(i,:) ==[2, 1]))
match_1 = match_1 +1;
else
mismatch_1 = mismatch_1 +1;
end
请注意外部括号括起来。