如何使用内置函数将零和NaN替换为零

时间:2012-05-07 16:03:35

标签: matlab octave

在八度音程中,是否有一个用于在向量中将Inf / NaN替换为0的函数

例如

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

我可以使用finite或find函数来查找有效值的索引/位置 但我不知道如何在不编写函数的情况下正确复制值。

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

2 个答案:

答案 0 :(得分:22)

>> 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

诀窍,这使用logical indexing

~是布尔值/逻辑值的NOT运算符,isfinite(a)生成逻辑向量,大小与:

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

如您所见,这用于逻辑索引。

答案 1 :(得分:5)

对于NaN,您可以使用isnan()将这些元素替换为您想要的任何元素。