|
|
|
Matrix die keine NaN und Inf Werte haben darf |
|
| tommylabamba |

Forum-Fortgeschrittener
|
 |
Beiträge: 87
|
 |
|
 |
Anmeldedatum: 08.08.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 29.06.2012, 09:54
Titel: Matrix die keine NaN und Inf Werte haben darf
|
 |
Die Matrix hat Werte (double) und NaN Werte.
Für die Weiterverarbeitung darf die Matrix keine NaN Werte haben.
Null kann ich nicht nehmen weil das ein Wert ist und Inf auch nicht.
Was kann ich dann nehmen?
|
|
|
|
|
|
| Seer |

Forum-Fortgeschrittener
|
 |
Beiträge: 53
|
 |
|
 |
Anmeldedatum: 23.04.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.14.0.739
|
 |
|
|
 |
|
Verfasst am: 29.06.2012, 10:38
Titel:
|
 |
Wie genau möchtest du sie weiterverarbeiten?
Wenn die NaN's einfach nur raus sollen und es in Ordnung ist, dass die Matrix kleiner wird geht sowas:
Ausgabe:
A =
1 2 3 NaN 5
B =
1 2 3 5
|
|
|
|
| tommylabamba |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 87
|
 |
|
 |
Anmeldedatum: 08.08.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 29.06.2012, 11:01
Titel:
|
 |
Das darf nicht sein, sonst verschieben sich die Werte innerhalb der Matrix, da wo NaN stand.
Andere Lösung außer 9999999 usw. ?
|
|
|
|
| Calle |

Forum-Century
|
 |
Beiträge: 145
|
 |
|
 |
Anmeldedatum: 08.02.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 29.06.2012, 11:52
Titel:
|
 |
Hey,
was genau suchst du denn?
Wie man die Werte ersetzt, oder mit welchen werten du diese ersetzt.
Zu ersterem würde ich die nan werte mit isnan suchen und dann ersetzen. Zu zweiten punkt kann ich nichts sagen, da es ja zig punkte zwischen null und unendlich gibt.
mfg
|
|
|
|
| Seer |

Forum-Fortgeschrittener
|
 |
Beiträge: 53
|
 |
|
 |
Anmeldedatum: 23.04.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.14.0.739
|
 |
|
|
 |
|
Verfasst am: 29.06.2012, 12:57
Titel:
|
 |
|
Wie gesagt, es wäre gut zu wissen was du danach mit deiner Matrix machen willst. Wenn die Größe der Matrix erhalten bleiben soll ist es unter Umständen sinnvoll die NaN's drin zu lassen und sie bei der Weiterverarbeitung entsprechend zu beachten. Die andere Variante wäre sie durch Zahlen zu ersetzen die in deiner Matrix normalerweise nicht vorkommen und diese dann bei der Weiterverarbeitung rauszufiltern.
|
|
|
|
| denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 29.06.2012, 13:30
Titel:
|
 |
|
|
|
| Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 29.06.2012, 14:54
Titel: Re: Matrix die keine NaN und Inf Werte haben darf
|
 |
| |
 |
|
Hallo tommylabamba,
Die Benutzung von Zahlen, von denen man annimmt, dass sie ausserhalb des möglichen Bereichs liegen, als Marker nennt man "magic numbers". Dies ist ein "Programming-Anti-Pattern", eine schlechter Programmierstil.
Es gibt immer immer wieder Fälle, bei denen solche Programme unerwartet reagieren, weil die Werte plötzlich doch als valide Zahlen auftreten. Generationen von Programmierern sind über magic numbers gestolpert, bis der IEEE754 Standard endlich NaNs und Infs eingeführt hat. So gab es viele Basic-Programme, die Endlos-Schleifen so definierten:
4e4 spricht man dann als "for e ver" aus. Wieso funktionierte dies? Weil Basic nur positive 16 bit Integerzahlen als schleifenzähler benutzt hat und bei 32767 ein Überlauf auftrat und i wieder auf 1 gesetzt wurde.
Und dann wurden Unsigned 32Bit Zähler eingeführt und die For-Schleife zählte brav bis 40.000 und brach ab. Ha.
Es ist, wie bereits oben gesagt viel besser entweder die NaNs mitzuschleppen, oder per ISNAN eine Matrix zu definieren, die die invaliden Elemente als Index speichert und am Schluß der Berechnung wieder heraus-"filtert".
Mehr zu Programming-Antipatterns: http://en.wikipedia.org/wiki/Anti-pattern
Gruß, Jan
|
|
|
|
| Seer |

Forum-Fortgeschrittener
|
 |
Beiträge: 53
|
 |
|
 |
Anmeldedatum: 23.04.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.14.0.739
|
 |
|
|
 |
|
Verfasst am: 02.07.2012, 16:28
Titel:
|
 |
Ich hatte jetzt das gleiche Problem wie tommylabamba, aus einem Vektor mussten die NaN's raus und der Vektor musste seine Größe beibehalten. Bei mir hat sich angeboten die NaN's durch 0 zu ersetzen. Ich habe dazu folgenden Code verwendet:
Damit ergibt sich folgende Ausgabe:
A =
NaN 0 1 2 NaN 4 NaN
A_nan =
1 5 7
A =
0 0 1 2 0 4 0
|
|
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|