0

我正在写一个简单的 IF 条件。作用是判断矩阵的每一行是否为一定的向量。代码如下:

  if (compareM(i,:)==[1, 0])||(compareM(i,:) ==[2, 1])
      match_1 = match_1 +1;
  else
      mismatch_1 = mismatch_1 +1;
  end

错误说 ''|| 的操作数 和 && 运算符必须可转换为逻辑标量值''。

compareM 是一个 2 矩阵,我想知道错误是否是由 || 造成的 手术。提前致谢!

4

3 回答 3

1

compareM(i, :)计算结果为 1x2 数值数组,因此compareM(i,:)==[1, 0]计算结果为 1x2 逻辑数组。||符号右侧的表达式也是如此。但是您需要在 的每一侧都有一个逻辑值||,而不是 1x2 的逻辑值数组。

如果您希望此表达式在 lhs 上的两个值==与 rhs 上的相应元素相同的情况下计算为真,请环绕all()每一侧:

all(compareM(i,:)==[1, 0]) || all(compareM(i,:) ==[2, 1])
于 2012-04-04T21:11:50.653 回答
1

如果要比较向量而不是标量值,则必须使用|运算符。结果,您得到逐元素成对比较的逻辑向量。要在 IF 语句中使用它,您必须将每个逻辑语句(然后使用||)或|ALL、ANY 或其他函数的结果转换为标量。

如果要比较向量是否相等,请使用 ISEQUAL 函数

if isequal(compareM(i,:)==[1, 0]) || isequal(compareM(i,:)==[2, 1])
于 2012-04-04T21:15:01.940 回答
0
if ((compareM(i,:)==[1, 0])||(compareM(i,:) ==[2, 1]))
    match_1 = match_1 +1;
else
    mismatch_1 = mismatch_1 +1;
end

注意外面的括号。

于 2012-04-04T21:09:06.010 回答