2012-05-07 8 views
10

In un'ottava, c'è una configurazione in funzione per la sostituzione Inf/NaN a 0 in un vettorecome sostituire Inf e NaN da zero utilizzando built in funzione

Ad esempio

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

posso usare finito o trovare la funzione per trovare l'indice/posizione dei valori validi ma non so come copiare i valori correttamente senza scrivere una funzione.

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

risposta

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 

fa il trucco, questo utilizza logical indexing

~ è l'operatore NOT per booleane valori/logiche e isfinite(a) genera un vettore logica, stesse dimensioni di una:

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

Come puoi vedere, questo è usato per l'indicizzazione logica.

+0

Grazie funziona. il ~ isfinite (a) restituisce un vettore? Quando faccio a ([0 0 1 0]) = 0 non funziona. –

+0

Ora, ho capito dopo aver letto i tuoi collegamenti. Grazie. –

5

Analogamente per NaN, è possibile utilizzare isnan() per sostituire questi elementi con quello che si desidera.