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 配列ではなく、 の両側に 1 つの論理値が必要です。

==左辺の両方の値が右辺の対応する要素と同じ場合にこの式を true と評価する場合は、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 に答える