2012-05-07 6 views
10

In Oktave zu ersetzen, ist es ein Build in Funktion fürwie Inf und NaN mit Null unter Verwendung der eingebaute Funktion

Zum Beispiel in einem Vektor Inf/NaN 0 ersetzt

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

ich verwenden kann, finite oder find Funktion, um den Index/die Position der gültigen Werte zu finden, aber ich weiß nicht, wie man die Werte korrekt kopiert, ohne eine Funktion zu schreiben.

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

Antwort

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 

funktioniert der Trick, diese logical indexing

~ ist der NOT-Operator für boolean/logische Werte verwendet, und isfinite(a) erzeugt eine logische Vektor, gleiche Größe wie a:

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

Wie Sie sehen, wird dies für die logische Indexierung verwendet.

+0

Danke, es funktioniert. ist das ~ isfinite (a), das einen Vektor zurückbringt? Wenn ich a ([0 0 1 0]) = 0 mache, funktioniert es nicht. –

+0

Jetzt bekomme ich es nach dem Lesen Ihrer Links. Vielen Dank. –

5

Ähnlich können Sie für NaN isnan() verwenden, um diese Elemente mit allem zu ersetzen, was Sie wollen.

Verwandte Themen