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

Bereichsauswahl mit Bedingung

 

Amun@Ra
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 29.07.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.07.2016, 15:11     Titel: Bereichsauswahl mit Bedingung
  Antworten mit Zitat      
Moin,

dies ist mein erster Beitrag im Forum. Ich hoffe keine Verhaltensregeln zu missachten.

Ich bin etwas verwirrt bzgl. einer Matlab-funktion die ich zur Auswertung meiner Zeitreihen verwende.

Und zwar möchte ich aus meiner Matrix "Werte" (499680x3 double) diejenigen Zeilen auswählen, welche meinem Kriterium entsprechen:

Code:

% Auswahl der Zeilen ohne -999 Werte und Zuweisung in neue Variable
A = Werte(Werte(1:50000,1)==-999,1);

A =

  -999
  -999
  -999
...

 


Wenn ich dieses Command ausführe, erhalte ich in A alle Werte die -999 entsprechen. Wenn ich den bereich auf 40000:50000 verringere, funktioniert die Auswahl nicht mehr und ich erhalte eine Liste von Messwerten die ich (derzeit) nicht zuordnen kann und die auch nicht mehr dem Kriterium entsprechen:


Code:

% Auswahl der Zeilen ohne -999 Werte und Zuweisung in neue Variable
A = Werte(Werte(40000:50000,1)==-999,1);

A =

    4.7500
    4.7300
    4.7500
    4.8000
    4.9700
...

 


letztlich sieht mein code derzeit wie nachfolgend aus, ich möchte ein laufendes Jahresmittel erzeugen:
Code:

 yMSLtimeline = zeros(length(Werte(4381:end-4380,1)),7);
 u = 0;
    for e = 4381:length(Werte)-4380
        u = u+1;
        yMSL  = mean(Werte(Werte(e-4380:e+4380,1)~= -999,1));
        ytime = Time(e,:);
        yY    = [ytime,yMSL];  
        yMSLtimeline(u,:) = yY;
    end
 


Kann mir jemand sagen was ich bei der Auswahl falsch mache?
Ich möchte abhängig von e immer das Mittel eines Zeilenbereichs ermitteln, jedoch ohne dabei Fehlerwerte mit einzubeziehen.
Damit wäre mir sehr geholfen Very Happy

VG
Amun
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.07.2016, 15:23     Titel:
  Antworten mit Zitat      
Hallo,

das Problem dürfte die Index-Verschiebung sein.

Code:
Werte2 = Werte(40000:50000, :);
A = Werte2(Werte2(:,1) ==-999,1);


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Amun@Ra
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 29.07.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.07.2016, 15:46     Titel:
  Antworten mit Zitat      
Danke Harald, das wäre eine Lösung.

Ich würde aber zusätzlich gerne verstehen wieso Matlab damit ein Problem hat. Wenn ich den Bereich Werte(30000:40000,Smile abfrage, dann klappt noch alles wie gehabt. erst über 40000 gibts Probleme...Liegt das an meiner Zeitreihe oder dem Indexbereich an sich?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.07.2016, 16:14     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Wenn ich den Bereich Werte(30000:40000,:) abfrage, dann klappt noch alles wie gehabt.

Das kann eigentlich nur ein glücklicher Zufall sein.

Der Codeteil Werte(40000:50000,1)==-999 erstellt einen logischen Vektor mit 10001 Elementen.
1. Element: ist die Bedingung an der Stelle 40000 erfüllt
2. Element: ist die Bedingung an der Stelle 40001 erfüllt
...

Wenn du das nun als Index verwendest, geht die 40000-Information verloren, d.h.
1. Element: bestimmt, ob das 1. Element ausgewählt wird (und nicht das 40000.)
2. Element: bestimmt, ob das 2. Element ausgewählt wird (und nicht das 40001.)
...

Ich würde bei Problemen den Index-Vektor immer in einem separaten Schritt erstellen und darauf achten, ob er genauso lang ist wie die Anzahl der Elemente / Zeilen (hier) / Spalten der Variable, in die indiziert werden soll. Wenn das nicht der Fall ist, muss man sehr aufpassen, dass es nicht wie hier zu einer unbeabsichtigten Interpretation der Indizes kommt.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Amun@Ra
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 29.07.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.08.2016, 10:39     Titel:
  Antworten mit Zitat      
Ok. Besten Dank!
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 - 2024 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.