2016-09-05 2 views
0

Ich habe eine Zellenmatrix in MATLAB, die die folgenden Spalten ..Konvertieren einer eine Spalte Zeitstempel in Zellenfeld MATLAB

Timestamp Info  Joint   X  Y   Z  State 
0.4449 'BASE05' 'SpineBase' -0.4222 -0.5245 2.681 'Tracked' 

Die 0,4449 Bedürfnisse zu einem Zeitstempel-Format konvertiert werden muss, die ich bisher Erreichen durch Extrahieren von Spalte 1 und Durchführen von Datumsangaben.

time = num(:,1); 
time = num2cell(time); 
Bodytime = datestr(cell2mat(time), 'HH:MM:SS'); 

Dies gibt mir ein Zeichen-Array mit allen Zeitstempeln.

Allerdings muss ich dieses Zeichen-Array zurück in die erste Spalte des Zellenarrays setzen. Ich habe hier einige Probleme, ich habe versucht, mein Zellen-Array in Zeichen-Array zu konvertieren, aber da ich eine Mischung aus Zahlen und String habe, denke ich nicht, dass das der Weg nach vorne ist. Ich habe auch versucht, die erste Spalte aus dem Bodytime-Zeichen-Array in mein ursprüngliches Zellen-Array BodyData zu ersetzen, aber ich denke nicht, dass das der richtige Weg ist.

Idealerweise brauche ich so etwas wie diese

Timestamp Info  Joint   X  Y   Z  State 
10:44:59 'BASE05' 'SpineBase' -0.4222 -0.5245 2.681 'Tracked' 

Mein Hauptziel hier zu bekommen, ist einen gewissen Zeitstempel zu sehen, wenn ein Ereignis passiert ist und extract/Grundstück (tbd) all betreffende Informationen für diese Zeit.

+0

Kannst du nicht einfach "Katze" zusammen? Ich meine, Sie können die Spalte wieder nach vorne verketten, indem Sie etwas wie [new_column, old_cell_array]; – GameOfThrows

Antwort

2

Wenn Sie datestr mit einem Array von Zeitstempeln aufrufen, erhalten Sie tatsächlich eine "Matrix" von Zeichen zurück, wobei jede Zeile das Format HH:MM:SS hat. Zwischen den Zeilen dieser Matrix gibt es keinen größeren Abstand als zwischen den Spalten (z. B. Spalte 3 ist das erste : Zeichen jedes Zeitstempels).

Sie können dieses Array sicher in ein Zellen-Array aufteilen, wobei jedes Zellenelement ein einzelner Zeitstempel ist, der dann in Ihr Quellzellen-Array zurückgehen kann. Dazu verwenden mat2cell:

BodytimeCell = mat2cell(Bodytime,size(time)); 

Allerdings gibt es wahrscheinlich unnötige Komplexität in dem, was Sie bereits getan. Am einfachsten, wenn Ihr Ziel ist ein Zellenfeld von Timestamp-Strings ist, könnten Sie dies direkt mit cellfun:

BodytimeCell = cellfun(@(t) datestr(t, 'HH:MM:SS'), time, 'UniformOutput',false); 

Jedoch Sie auch interessieren könnten, ob es wirklich überhaupt die Zeitstempel als Strings speichern hilft. Es kann vorteilhafter sein, sie als datetime array zu speichern, die sich an das Format erinnern können, in dem sie angezeigt werden sollen, während Sie bei Bedarf weiterhin mit dem Wert arbeiten können.

Die Struktur der Daten als Ganzes deutet auch darauf hin, dass es besser sein könnte, als table als ein Zell-Array zu speichern. Dadurch erhalten Sie natürlichere Möglichkeiten zur Interaktion mit den Daten. So können z. B. die numerischen Spalten in einer Tabelle direkt wie numerische Arrays behandelt werden und müssen nicht von einem Zellenarray mit Zahlen konvertiert werden.

+0

@Josh - lesen Sie den letzten Absatz hier sorgfältig, das ist die beste Lösung für Ihr Problem – EBH

Verwandte Themen