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

Nach Tageszeit filtern

 

EddiEdward
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 05.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2011, 16:25     Titel: Nach Tageszeit filtern
  Antworten mit Zitat      
Guten Tag,

Ich bin noch recht neu in MatLab und beschäftige mich zur Zeit noch mit der Datenanalyse um das Grundhandwerk zu erlernen.

Aktuell habe ich folgendes Problem:

Ich habe eine Tabelle mit Zeitdaten in der Form

Zitat:
...
734463,040781900
734463,059035900
734463,082563600
734463,109455400
734463,157487000
...


Jede Zahl entspricht der Empfangszeit eines Meldetelegramms. Der Zeitrahmen der Tabelle ist bspw. 1 ganzer Monat. Es wechselt also ständig das Datum und so die Zahl vor dem Komma.

Ich möchte nun sämtliche Telegramme(Datensätze) herausfiltern, die in einer bestimmten Tageszeit angekommen sind, z.B. zwischen 10:00 Uhr und 12:00 Uhr.

Ich habe keine Ahnung wie ich das machen könnte.

Ich denke, dass ich mit einer Umwandlung der Daten in Vektoren die Uhrzeit in jedem Datensatz isolieren könnte und mit den Eingabezeiten vergleichen. Das würde zum einen wieder unelegante for-Schleifen erforderlich machen, wobei ich darum am Ende sicherlich nicht herum kommen kann. Was schwerer wiegt, für die Rechenzeit, ist die Umwandlung eines jeden datenum in einen Vektor. Mit solch einer Umwandlung über viele tausend Daten (~20.000) hinweg habe ich schon schlechte Erfahrung gemacht.


Hat jemand eine Idee, ob ich mit irgendeiner Funktion oder einem Trick die Stellen vor dem Komma einer jeden Uhrzeit(datenum) abschneiden kann? Da die Stellen nach dem Komma die Uhrzeit 'verkörpern' ließe sich eine sehr schnelle Schleife basteln...

Viele Grüße,

Eddi
Private Nachricht senden Benutzer-Profile anzeigen


EddiEdward
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 05.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2011, 16:27     Titel:
  Antworten mit Zitat      
Mist, ich habe vergessen, den Thread unter "Programmierung" zu eröffnen. Vielleicht könnte ein Mod ihn verschieben?
Private Nachricht senden Benutzer-Profile anzeigen
Verschoben: 14.01.2011, 17:45 Uhr von denny
Von Sonstige MATLAB Fragen nach Programmierung
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 14.01.2011, 18:31     Titel:
  Antworten mit Zitat      
Hallo,

das einfachste wird wohl sein beim Einlesen der Zahlen aus der Datei nur die Zahlen hinter dem Komma zu verwnden.

Am Beispiel einer Textdatei wuerde dies z.B. so gehen:

Code:

fid = fopen('PATH\test.txt');
data = textscan(fid,'%*d%d','Delimiter',',');
fclose(fid);
mat = cell2mat(data);
 


MFG

Sco
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: 15.01.2011, 01:22     Titel: Re: Nach Tageszeit filtern
  Antworten mit Zitat      
Hallo EddiEdward,

Zitat:
...
734463,040781900
734463,059035900
734463,082563600
734463,109455400
734463,157487000
...

In welcher Form liegt den die Tabelle in Matlab vor? Ist das ein Cell string? Sind das Zahlen, die Du statt Dezimal-Punkt mit Komma gechrieben hast?

Die Zahlen sehen sehr nach DATENUM-Werten aus. Die Umwandlung in ein DATEVEC-Array sollte sehr schnell gehen, das DATEVEC auch eine Vektor von Inputs annimmt:
Code:
n = repmat(now, 20000, 1);
tic; v = datevec(n); toc
% >> 0.03 sec

Das lohnt es sich kaum vorher den Datums-Anteil abzuspalten.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
EddiEdward
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 05.01.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.01.2011, 20:09     Titel:
  Antworten mit Zitat      
Guten Abend,

Ich danke für die Antworten.

@ Sco: Danke für die Antwort, ich werde diese Möglichkeit im Hinterkopf behalten für zukünftige Probleme. Letztlich habe ich es dann doch mit datevec gemacht. Ich erinnere mich leider nicht mehr, in welchem Zusammenhang ich schlechte Erfahrungen mit datevec gemacht habe.

Es klappt bestens. Die Datenum-Zahlenwerte werden in Vektoren umgewandelt und dann lediglich die 4. Spalte ('HH') mit der Eingabezeit verglichen. Dauert keine Sekunde.

Danke
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.