将一列转换为单元数组MATLAB中的时间戳

时间:2016-09-05 15:27:08

标签: arrays matlab

我在MATLAB中有一个包含以下列的单元格数组。

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

需要将0.4449转换为时间戳格式,这是迄今为止我通过提取第1列并执行datetr来实现的。

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)该时间的所有相关信息。

1 个答案:

答案 0 :(得分: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而不是单元格数组可能更好。这为您提供了更自然的方式来与数据交互 - 例如,表中的数字列可以直接处理为数字数组,而不必从数字的单元格数组转换。