WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Matrix die keine NaN und Inf Werte haben darf

 

tommylabamba
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 87
Anmeldedatum: 08.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2012, 09:54     Titel: Matrix die keine NaN und Inf Werte haben darf
  Antworten mit Zitat      
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?
Private Nachricht senden Benutzer-Profile anzeigen


Seer
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 23.04.12
Wohnort: ---
Version: 7.14.0.739
     Beitrag Verfasst am: 29.06.2012, 10:38     Titel:
  Antworten mit Zitat      
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:
Code:
A = [1 2 3 nan 5]
B = A(~isnan(A))


Ausgabe:
A =
1 2 3 NaN 5
B =
1 2 3 5
Private Nachricht senden Benutzer-Profile anzeigen
 
tommylabamba
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 87
Anmeldedatum: 08.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2012, 11:01     Titel:
  Antworten mit Zitat      
Das darf nicht sein, sonst verschieben sich die Werte innerhalb der Matrix, da wo NaN stand.

Andere Lösung außer 9999999 usw. ?
Private Nachricht senden Benutzer-Profile anzeigen
 
Calle
Forum-Century

Forum-Century


Beiträge: 145
Anmeldedatum: 08.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2012, 11:52     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Seer
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 23.04.12
Wohnort: ---
Version: 7.14.0.739
     Beitrag Verfasst am: 29.06.2012, 12:57     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 29.06.2012, 13:30     Titel:
  Antworten mit Zitat      
Bitte keine Doppelposting, wenn du später erkennst, dass du deine Frage falsch formuliert hast, mache bitte kein neues Thread auf, sondern setzt geöffneten fort:
http://www.gomatlab.de/der-kleine-gomatlab-de-knigge-t125.html

Zuletzt bearbeitet von denny am 02.07.2012, 09:10, insgesamt 2-mal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 29.06.2012, 14:54     Titel: Re: Matrix die keine NaN und Inf Werte haben darf
  Antworten mit Zitat      
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:
Code:
for i = 1 TO 4e4 ...

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
Private Nachricht senden Benutzer-Profile anzeigen
 
Seer
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 23.04.12
Wohnort: ---
Version: 7.14.0.739
     Beitrag Verfasst am: 02.07.2012, 16:28     Titel:
  Antworten mit Zitat      
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:

Code:
A = [nan 0 1 2 nan 4 nan]
A_nan = find(isnan(A))
A(A_nan) = 0

% bzw. noch weiter verkürzt:
A = [nan 0 1 2 nan 4 nan]
A(find(isnan(A))) = 0


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
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.