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 替换为 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 & 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 回答