3

Matlab から予期しない結果が得られましたが、その理由がわかりません。私の目標は、ゼロ以下の値を Inf に置き換えることです。

これが、私が期待する正しい結果です。

C = [0 0 0 0 0 1 1 1 1 1 1];
C(C<=0)=Inf
C = Inf   Inf   Inf   Inf   Inf     1     1     1     1     1     1

しかし、別の方法でプロセスを開始すると、matlab は値 <=0 を Inf ではなく 1 に置き換えます。

A = [0     2     4     6     8    10    12    14    16    18    20];
b = 7;
E=A-b>0
E = 0     0     0     0     1     1     1     1     1     1     1
E(E<=0)=Inf
E = 1     1     1     1     1     1     1     1     1     1     1     

なぜこれが起こっているのですか?論理的なステップと関係があると思いますがE=A-b>0、なぜ違うのかわかりません。

私の全体的な目標は、スカラーに最も近いベクトルのより大きな値のインデックスを見つけることです。問題を引き起こしていると思われるステップをスキップして、次のように望ましい結果を得ることができることに気づきました( A & b は既に上記のように定義されています):

F=A-b
F = -7    -5    -3    -1     1     3     5     7     9    11    13
F(F<=0)=Inf
F = Inf   Inf   Inf   Inf     1     3     5     7     9    11    13
[~,ind]=min(F)
ind = 5

しかし、なぜMatlabが上記で期待した結果を出さなかったのか、まだわかりません(そして、簡単な解決策に気付く前に、質問の入力をすでに終えていました)。では、Matlab が予期しない結果をもたらす理由を知っている人はいますか?

ありがとう

4

1 に答える 1

4

これは がE論理配列であるためです。可能な値は 1 または 0 です。使用E=double(A-b>0)すると、期待どおりの結果が得られます。

于 2014-03-16T16:05:34.740 に答える