Неожиданный результат / ошибка в 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 заменяет значения ‹= 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 дает неожиданный результат?

Спасибо


person agnuke    schedule 16.03.2014    source источник


Ответы (1)


Это потому, что E - логический массив. Возможные значения: 1 или 0. Если вы используете E=double(A-b>0), вы получите ожидаемые результаты.

person Daniel    schedule 16.03.2014