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

Problem mit Sortierung eines Datensatzes

 

Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.11.2012, 18:38     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
in denen gerade Zahlen stehen?

Ist das so zu verstehen, dass dort keine ungeraden Zahlen stehen dürfen? Oder keine NaN?

Ansonsten hört sich das nach einem Fall für nancov an.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen


matlabbrig
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 17.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2012, 18:45     Titel:
  Antworten mit Zitat      
Hallo Harald,

da habe ich mich wohl unglücklich ausgedrückt. Mit "gerade" meinte ich "zum betrachteten Zeitpunkt". nancov so oder so, nur müssen Spalten die innerhalb des rolling windows auf dessen gesamter Länge nur NaNs enthalten zwingend ignoriert werden.

Grund: Die cov-Matrix wird später als Sigma in die mvnrnd-Funktion übergeben und darf somit zwingend kein NaN enthalten. Evtl. dürfen sogar erst Spalten genommen werden die auf der kompletten Länge des Fensters kein einziges NaN enthalten, dafür kenne ich nancov nicht gut genug...


Also beispielhaft so: Angenommen die Fensterlänge ist 10, und von Spalte zu Spalte verschiebt sich der Beginn der Zahlen um 10 Zeilen nach hinten, dann:

- Spalten 1&2 ab Zeile 20
- Spalten 1,2,3 ab Zeile 30

usw. usf.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.11.2012, 18:54     Titel:
  Antworten mit Zitat      
Hallo,

ja, wenn Spalten ausschließlich NaN enthalten, dann gibt auch nancov NaN zurück.

Die entsprechenden Zeilen/Spalten der Kovarianzmatrix kannst du dann ja nachträglich eliminieren, siehe
http://www.mathworks.com/help/relea.....nalysis/missing-data.html

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
matlabbrig
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 17.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2012, 19:02     Titel:
  Antworten mit Zitat      
Denkst du denn das ist so weniger aufwändig als mein "Plan"?

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.11.2012, 19:09     Titel:
  Antworten mit Zitat      
Hallo,

Mir ist dein Plan nicht wirklich klar - Code ist da oft hilfreicher. Ich denke, dass mein Vorschlag der einfachstmögliche ist (jedenfalls sofern ich das Problem richtig verstanden habe) - sonst hätte ich ihn nicht gemacht Wink

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
matlabbrig
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 17.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2012, 19:18     Titel:
  Antworten mit Zitat      
Wenn ich Code dazu schreiben könnte hätte ich das Problem ja nicht mehr Confused

Mein Plan ist:

1) Gehe alle Spalten Zeile für Zeile durch und überprüfe ob/wo die erste Zahl kommt nach den NaNs

2) Fange an nancov zu berechnen ab der Zeile wo es zum ersten Mal möglich ist (also ab dem Punkt wo die zweite Spalte die erste Zahl enthält). Berechne nancov dabei NUR aus Spalten in denen innerhalb des Fensters mindestens eine Zahl enthalten ist.

3) schiebe das Fenster zur Berechnung von nancov einen Tag weiter und beginne wieder bei Schritt 1)

Code:
for i = 1:numdays-fenstergroesse

 Covvec(i) = nancov(Daten(i:i+fenstergroesse),  Spalten wo mindestens eine Zahl enthalten ist);

 end
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.11.2012, 20:29     Titel:
  Antworten mit Zitat      
Hallo,

zu " Spalten wo mindestens eine Zahl enthalten ist":
Hast du dir denn den Link angesehen? Daraus ist ja direkt abzuleiten, wie man die Spalten bekommt, in denen nicht alle Zahlen NaN sind.
Code:


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
matlabbrig
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 17.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2012, 20:40     Titel:
  Antworten mit Zitat      
Hätte ich gerne, wenn ich meine Login-Daten nicht gerade nicht mehr auf die Reihe bekommen würde Embarassed

Den Code den du eben geschrieben hast kenne ich, damit +find+'first' habe ich die jeweils erste Datenzeile identifiziert. Bin nur aus irgendeinem Grund gar nicht auf die Idee gekommen das weiterhin damit zu versuchen. Werde ich jetzt mal machen.

Danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
matlabbrig
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 17.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2012, 22:10     Titel:
  Antworten mit Zitat      
Habe es jetzt mit

Code:
Daten = Daten';

Daten(any(isnan(Daten),2),:)=[];

Daten = Daten';


hinbekommen. Etwas umständlich, aber ich will ja Spalten löschen und keine Zeilen. Einziges Problem ist jetzt noch zuzuordnen WELCHE Spalten jeweils entfernt wurden, was leider wichtig ist. Confused
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.11.2012, 22:45     Titel:
  Antworten mit Zitat      
Hallo,

mit etwas Überlegen schaffst du es auch ohne diesen Umweg, die Spalten zu löschen ;)
Die Frage ist aber: willst du die Spalten löschen, die NaN enthalten (das ist das, was du momentan machst) oder die, die nur aus NaN bestehen?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
matlabbrig
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 17.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2012, 23:41     Titel:
  Antworten mit Zitat      
Ich GLAUBE ich will die löschen die überhaupt NaNs enthalten, um in mein rolling window nur Spalten aufzunehmen die auf der vollen Länge des Fensters Daten enthalten. Sozusagen aus Gründen der methodischen Korrektheit. Die Ergebnisse von nancov werden ja ein wenig anders aussehen nehme ich an.

Die Spalten die übrig bleiben sehen auch sinnvoll aus, von 0 auf 2,4,6,8 usw bis sie konstant auf der maximalen Anzahl bleiben.

Zum Thema "mit etwas Überlegen...": Ich habe echt schon alles ausprobiert was meinem matschigen Gehirn heute noch einfällt, aber ich bekomme entweder eine Fehlermeldung oder gelöschte Zeilen... Bin wohl zu doof Wink

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.11.2012, 00:03     Titel:
  Antworten mit Zitat      
Hallo,

"glauben" heißt "nicht wissen".

Zitat:
von 0 auf 2,4,6,8 usw bis sie konstant auf der maximalen Anzahl bleiben.

Das verstehe ich nicht.

Dann eben nochmal:

Alle Spalten entfernen, in denen NaN vorkommen:
Code:
daten(:, any(isnan(daten))) = [];

Alle Spalten entfernen, die nur aus NaN bestehen:
Code:
daten(:, all(isnan(daten))) = [];


Eine systematische Erweiterung der MATLAB-Kenntnisse könnte vielleicht von Nutzen sein, damit du dich nicht von Problem zu Problem hangeln musst.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
matlabbrig
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 17.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.11.2012, 00:11     Titel:
  Antworten mit Zitat      
Hallo Harald,

das mit den 0,2,6 usw soll ausdrücken dass die Anzahl der nach der NaN-Bereinigung verbleibenden Spalten passt, es also funktioniert.

(:, any...) habe ich als erstes probiert, dabei hat mich jedoch die Hilfefunktion geleimt, ich nahm an dass noch ein ...,1) dahinter gehört wenn die Dimensionen im Vergleich zu vorher andersherum sind.
Vielen Dank für die Aufklärung!

Mit der systematischen Kenntniserweiterung hast du Recht, nur bekommt man bei uns keinen Kurs in dem Programm angeboten, bin also kompletter Autodidakt. Und welche Kenntnisse für das was man tun muss relevant sind erfährt man leider tendenziell erst wenn man vor einem Problem steht das eben diese Kenntnisse erfordert...

Danke und viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.11.2012, 10:11     Titel:
  Antworten mit Zitat      
Hallo,

das ",1" sollte an sich nicht schaden, ist aber bei "echten" Matrizen (d.h. nicht Zeilenvektor) das Standardverhalten. Das ist auch so dokumentiert.

Zitat:
nur bekommt man bei uns keinen Kurs in dem Programm angeboten

Was heißt "bei uns"? Selbst wenn es "bei euch" keinen Kurs gibt, gibt es durchaus andere Angebote, z.B. durch MathWorks
http://www.mathworks.de/training-schedule/

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
matlabbrig
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 17.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.11.2012, 15:49     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich habe jetzt alles so hinbekommen wie ich es haben will.

Danke + viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2, 3

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.