2016-06-03 5 views
1

Betrachten Sie das folgende BeispielMATLAB: Wie für den Zugriff auf ‚Dauer‘ Datentyp

xDATA = data_timestamp; 
[~,~,Days,Hour,Min,~] = datevec(xDATA(2:end) - xDATA(1:end - 1)); 
BadSamplingTime = find((Days)> 0 | (Hour)> 0 |(Min)> 5); 

In dem xData einen Vektor von Zeitmarken enthält, und ich versuche, die Proben mit Abtastzeit größer als 5 Minuten zwischendurch, zu finden der Algorithmus funktioniert gut, aber es schafft 3 zusätzliche Vektoren für die Daten so groß wie mein Zeitstempel Vektor (die Größe zu Zeitstempel Vektor ziemlich groß ist), während, wenn ich dies tun

DurationTime = xDATA(2:end) - xDATA(1:end - 1); 

Anstelle der zweiten Linie wird es nur Erstellen Sie einen Vektor gleicher Länge des Datentyps 'duration', der m ist uch leichter, weil handhaben, aber das Problem, das ich kann nicht scheinen, jeden Index des Dauer-Datentypen für Beispiel

DurationTime(5,1) 

ans = 

    26:00:01 

ich diesen 26 Stunden Teil zugreifen muß zugreifen zu können, hat jemand eine Idee, wie das zu tun? oder ein besserer Vorschlag

Antwort

3

Sie können ein duration-Objekt erstellen und es dann verwenden, um es mit dem Dauervektor DurationTime zu vergleichen. Das Ergebnis von a>b ist ein logischer Vektor, der direkt verwendet werden kann, um die Elemente von DurationTime zu indizieren und Ihnen so alle Werte zu geben, bei denen die Dauer größer als 5 Minuten ist.
Hinweis: Sie können die Differenz/Dauer direkt mit diff berechnen.

Code:

% create example data 
xDATA = (([0:4,4+26*60,4+26*60+1:4+26*60+5])/24/60+datetime('now')).'; 

% calculate the durations 
DurationTime = xDATA(2:end) - xDATA(1:end-1);  % as in the question 
%DurationTime = diff(xDATA);      % alternative 

% get index and values of all durations greater than 5 minutes 
ind = find(DurationTime>duration(0,5,0)) 
DurationTime(ind) 

% get values of all durations greater than 5 minutes (direct solution, if no index needed) 
DurationTime(DurationTime>duration(0,5,0)); 

Ergebnis:

ind = 

    5 

ans = 

    26:00:00 
+0

wenn ich brauche, um die Indizes der Zeitdauer Matrix zu finden, was soll ich tun? weil find() nicht funktioniert für die Dauer Datentyp – Umar

+1

@Umar Ich habe es in meiner Antwort hinzugefügt. Sie können 'find' für den logischen Vektor verwenden, da die Einträge, deren Dauer größer als 5 Minuten ist, den Wert" 1 "haben, der nicht Null ist. Somit gibt 'find' diesen Index zurück. – Matt

Verwandte Themen