Как заменить Inf и NaN на ноль, используя встроенную функцию

В октаве есть встроенная функция для замены Inf/NaN на 0 в векторе

Например

a = log10([30 40 0 60]) => [1.4771 1.6021 -Inf 1.7782]

Я могу использовать функцию конечного или найти, чтобы найти индекс/позицию действительных значений но я не знаю, как правильно копировать значения без написания функции.

finite(a) => [1 1 0 1]

Ответ 1

>> a = log10([30 40 0 60])
a =
      1.477    1.602    -Inf    1.778

>> a(~isfinite(a))=0
a =
      1.477    1.602    0       1.778

делает трюк, он использует логическую индексацию

~ - это оператор NOT для логических/логических значений, а isfinite(a) генерирует логический вектор, такой же размер, как:

>> ~isfinite(a)
ans =
     0     0     1     0

Как вы можете видеть, это используется для логической индексации.

Ответ 2

Аналогично для NaN вы можете использовать isnan(), чтобы заменить эти элементы тем, что вы хотите.