Matlab意外的结果/错误?用Inf替换数组中的零

时间:2014-03-16 15:49:11

标签: matlab inf

我从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将值&lt; = 0替换为1而不是Inf。

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&amp; 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会给出意想不到的结果吗?

由于

1 个答案:

答案 0 :(得分:4)

这是因为E是一个逻辑数组。可能的值为1或0.如果使用E=double(A-b>0),您将获得预期的结果。