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

Loop

 

Kathicita
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 20.09.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2020, 08:54     Titel: Loop
  Antworten mit Zitat      
Hallo,

ich habe eine Matrix, in der in den ersten drei Spalten das Jahr, der Monat und der Tag stehen und in der 4. Spalte die Häufigkeit dieses Datums (Datetimes wurden zuvor aufgesplittet und dann mit groupcounts gezählt).

Nun würde ich gerne aus der Matrix zusammenhängende Tage angezeigt bekommen.
Es geht mir dann darum, dass die Counts (Spalte 4) der entsprechenden direkt hintereinander liegenden Tage zusammen gezählt werden und ich anschließend weiß, von welchem bis welchem Datum hier zusammen gerechnet wurde.

z.B.
(Jahr) (Monat) (Tag) (Count)
2004 4 28 1
2004 4 29 4
2004 4 30 125
2004 5 1 140
2004 5 2 160
2004 5 3 110
2004 5 4 80
2004 5 5 1
2004 5 7 40

Hier hätte ich gerne einmal alle Tage vom 28.4.-5.5. zusammen gezogen mit einer Angabe vom Start- und Enddatum sowie der Summe in Counts (891).
Da ich aber sehe, dass die ersten zwei Tage, sowie der letzte Tag erheblich niedrigere Werte haben, würde ich diese gerne hier nicht berücksichtigen.
Mich interessiert also nur das Zeitfenster vom 30.4.-4.5. Hierfür wäre es interessant zu sagen, nehme mir alle aufeinanderfolgenden Tage, bei denen der Count größer ist als 5.

Das Problem ist hier, dass zwei hintereinander folgende Tage sich in unterschiedlichen Monaten (hier 30.4. und 1.5.) befinden können sowie in unterschiedlichen Jahren (31.12, 1.1).
Ich hatte zunächst an einen Loop gedacht, bei dem man für Jedes Jahr und jeden Monat (y== year && m == month) schaut, wo Tage hintereinander liegen und daraus dann die Summe macht.
Aber aufgrund des zuvor beschriebenen Problems benötige ich eine andere Funktion.
Außerdem reicht es mir leider nicht nur die Counts von auf einanderfolgenden Tage zusammen gerechnet zu bekommen, sondern ich müsste auch wissen, von welchem bis welchem Datum die neue Counts Zahl stammt.

Hat da jemand zufällig eine Idee für?

Liebe Grüße

Matlab_1970_2005_T1_Dates_Counts.mat
 Beschreibung:

Download
 Dateiname:  Matlab_1970_2005_T1_Dates_Counts.mat
 Dateigröße:  3.28 KB
 Heruntergeladen:  360 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

erster Schritt: in datetime umwandeln. Dann kannst du bequem sehen, wo die Sprünge sind.

Code:
d = datetime(Matlab_1970_2005_T1_Dates_Counts(:,1), Matlab_1970_2005_T1_Dates_Counts(:,2), Matlab_1970_2005_T1_Dates_Counts(:,3));
jump = find(diff(d) > 1);


Vielleicht hilft dir das schon mal, um selbst weiter zu kommen. Wenn nicht, gerne nochmal fragen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Kathicita
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 20.09.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.05.2020, 09:51     Titel:
  Antworten mit Zitat      
Hallo,
sehr gut, vielen Dank dir!

Gibt es dann anschließend eine Funktion, um immer die dazwischen liegenden Tage zusammen zu fassen?
Also, dass man sagt, fass mir aus der Matrix X immer die Werte zusammen, welche zwischen diesen Tagen liegen?
Also wenn bei jump rauskommt 1, 3 z.B. den Tag zwei und drei?

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

Forum-Meister


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

dazu würde ich dann wirklich eine for-Schleife schreiben.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Kathicita
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 20.09.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.05.2020, 19:51     Titel:
  Antworten mit Zitat      
Hallo,

ich habe ein Problem bei meinem Loop dazu.

Ich würde ja gerne aus einem Vektor "Counts" die Zeilen zusammenfassen, welche zwischen den jeweiligen Zeilen-Nummern in "Jumps" liegen zusammenfassen.
Also wenn jumps am Angang z.B. 1 3 ist würde ich gerne die zweite und dritte Zeile aus "Counts" summiert haben.
Die ersten Überlegungen sehen wie folgt aus:

Code:
for row = 1:size(jump);
   for jump(row)+1 % jede Zeile plus 1 als Nummer (nicht nächste Zeile)
    if jump (row) + 1 ~= jump(row + 1) % wenn diese Nummer ungleich der nächsten Jump Zeile ist
    x= jump(jump >jump (row) + 1 & jump (row+1)) % such mit die Zahlen zwischen dieser Nummer und der nächsten Jump Zeile (inklusive) heraus
    % Summe aus "Counts" aus den x Zeilen, die auf einander folgen
    % Countsum= sum(Counts())
    end
   end
end


Hier scheinen mehrere Probleme aufzutreten, da allein bei x schon ein leerer Vektor auftaucht. Außerdem weiß ich nicht genau, wie man aus einem Vektor, hier "Counts" die Zeilen aus dem Vektor "x" indizieren kann.

Hast du hier vielleicht noch einen Tipp für mich?

Liebe Grüße und noch einen schönen Abend

Counts.mat
 Beschreibung:

Download
 Dateiname:  Counts.mat
 Dateigröße:  1.26 KB
 Heruntergeladen:  333 mal
jump.mat
 Beschreibung:

Download
 Dateiname:  jump.mat
 Dateigröße:  1.65 KB
 Heruntergeladen:  359 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

in der Tat mehrere Probleme:
Code:
for row = 1:length(jump)  % besser als size
   % Die folgende Zeile ist m.E. nicht sinnvoll, da der Schleifenindex fehlt. Vermutlich ist sie überflüssig. Den Kommentar dahinter verstehe ich nicht
   for jump(row)+1 % jede Zeile plus 1 als Nummer (nicht nächste Zeile)
    if jump (row) + 1 ~= jump(row + 1) % wenn diese Nummer ungleich der nächsten Jump Zeile ist
% In der nächsten Zeile ist der Teil nach & nicht sinnvoll. Du musst jump (row+1) ja nmit irgendwas vergleichen
    x= jump(jump >jump (row) + 1 & jump (row+1)) % such mit die Zahlen zwischen dieser Nummer und der nächsten Jump Zeile (inklusive) heraus
    % Summe aus "Counts" aus den x Zeilen, die auf einander folgen
    % Countsum= sum(Counts())
    end
   end
end
 


Statt sich von einer Frage zur nächsten zu hangeln kann es besser sein, mit den Grundlagen anzufangen, insbesondere for- und if-Anweisungen.
https://www.mathworks.com/learn/tutorials/matlab-onramp.html
(z.B. Abschnitt Programming)

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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.