2016-09-05 6 views
0

У меня есть массив ячеек в MATLAB, которая имеет следующие столбцы ..Преобразовать один один столбец временной метки в массиве ячеек MATLAB

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

The 0.4449 должен быть преобразован в формат временной метки, которые я до сих пор достигая путем извлечения колонки 1 и выполнения datestr.

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

Это дает мне массив символов со всеми отметками времени.

Однако мне нужно вернуть этот массив символов в первый столбец массива ячеек. У меня здесь проблемы, я пытался преобразовать массив ячеек в массив символов, но поскольку у меня есть сочетание чисел и строк, я не думаю, что это путь вперед. Я также попытался заменить первый столбец из массива символов bodytime в моем исходном массиве BodyData, но я не думаю, что это тоже путь вперед.

В идеале мне нужно, чтобы получить что-то вроде этого

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

Моя главная цель здесь, чтобы посмотреть на определенную временную метку, когда произошло событие, и экстракт/участок (TBD) все относительно информации на то время.

+0

Не можете ли вы просто «сшить» их вместе? Я имею в виду, что вы можете конкатенацию столбца на передний план, делая что-то вроде [new_column, old_cell_array]; – GameOfThrows

ответ

2

Когда вы вызываете datestr с массивом временных меток, то, что вы на самом деле возвращаете, является «матрицей» символов, где каждая строка имеет формат HH:MM:SS. Между строками этой матрицы нет большего разделения, чем между ее столбцами (где столбец 3, например, является первым символом : каждой временной метки).

Вы можете разделить этот массив на массив ячеек, где каждый элемент ячейки представляет собой единую временную метку, которая затем может вернуться в ваш массив исходных ячеек. Для этого используйте mat2cell:

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

Однако есть возможно, излишняя сложность в том, что вы уже сделали. Проще всего, если ваша цель состоит в массив ячеек из временных меток строк, вы можете сделать это прямо с cellfun:

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

Однако вы могли бы также рассмотреть, если это действительно помогает сохранить временные метки как строки на всех. Может быть более выгодным хранить их как datetime array, которые могут запомнить формат, который вы хотите отобразить, в то же время позволяя вам работать со значением, если вам нужно.

Структура данных в целом также предполагает, что лучше хранить в качестве table, чем массив ячеек. Это дает вам более естественные способы взаимодействия с данными - например, числовые столбцы в таблице могут рассматриваться как числовые массивы напрямую, а не для преобразования из массива ячеек чисел.

+0

@Josh - внимательно прочитайте последний параграф, это лучшее решение для вашей проблемы – EBH

Смежные вопросы