2012-05-07 11 views
10

En octava, hay una acumulación en la función para la sustitución de los Inf/NaN a 0 en un vectorcómo sustituir Inf y NaN con cero utilizando una función en la función

Por ejemplo

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

puedo usar función finita o buscar para encontrar el índice/posición de los valores válidos pero no sé cómo copiar los valores correctamente sin escribir una función.

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

Respuesta

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

hace el truco, este utiliza logical indexing

~ es el operador NOT para valores booleanos/lógicos y isfinite(a) genera un vector lógico, el mismo tamaño que un:

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

Como puede ver, esto se usa para la indexación lógica.

+0

Gracias, funciona. ¿El ~ isfinito (a) devuelve un vector? Cuando hago a ([0 0 1 0]) = 0 no funciona. –

+0

Ahora, lo entiendo después de leer sus enlaces. Gracias. –

5

De forma similar para NaN, puede usar isnan() para reemplazar estos elementos con lo que desee.

Cuestiones relacionadas