web-dev-qa-db-ja.com

組み込み関数を使用してInfとNaNをゼロに置き換える方法

オクターブで、ベクトルのInf/NaNを0に置き換えるための組み込み関数はありますか

例えば

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

有限関数または検索関数を使用して有効な値のインデックス/位置を見つけることができますが、関数を作成せずに値を正しくコピーする方法がわかりません。

finite(a) => [1 1 0 1]
13
user1242199
_>> 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
_

ご覧のとおり、これは論理インデックスに使用されます。

22
Gunther Struyf

同様にNaNの場合、isnan()を使用して、これらの要素を必要なものに置き換えることができます。

5
Dominik