Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays MATLAB单元数组中的一列转换为时间戳_Arrays_Matlab - Fatal编程技术网

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

Arrays MATLAB单元数组中的一列转换为时间戳,arrays,matlab,Arrays,Matlab,我在MATLAB中有一个单元格数组,它有以下列 Timestamp Info Joint X Y Z State 0.4449 'BASE05' 'SpineBase' -0.4222 -0.5245 2.681 'Tracked' 需要将0.4449转换为时间戳格式,到目前为止,我一直通过提取列1并对其执行datestr来实现该格式 time = num(:,1); time = num2cell(

我在MATLAB中有一个单元格数组,它有以下列

Timestamp  Info      Joint          X        Y          Z     State
0.4449    'BASE05'    'SpineBase' -0.4222   -0.5245    2.681 'Tracked' 
需要将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)该时间的所有相关信息。

当您使用一组时间戳调用
datestr
时,实际返回的是一个字符“矩阵”,其中每行的格式为
HH:MM:SS
。该矩阵的行与列之间的间隔不比其列之间的间隔大(例如,第3列是每个时间戳的第一个
字符)

您当然可以将此数组拆分回一个单元格数组,其中每个单元格元素都是一个时间戳,然后可以返回到源单元格数组中。要执行此操作,请使用
mat2cell

BodytimeCell = mat2cell(Bodytime,size(time));
然而,在你已经做的事情中可能有不必要的复杂性。最简单的是,如果您的目标是时间戳字符串的单元格数组,则可以直接使用
cellfun

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

但是,您也可以考虑将时间戳存储为字符串是否真的有帮助。将它们存储为一种格式可能更为有利,它可以记住要显示它的格式,同时还允许您在需要时以数字方式处理该值


数据的整体结构也表明,存储为一个数组可能比存储单元数组更好。这为您提供了与数据交互的更自然的方式-例如,表中的数字列可以直接被视为数字数组,而不必从数字单元格数组转换。

当您使用时间戳数组调用
datestr
时,您实际得到的是字符的“矩阵”,其中每行的格式为
HH:MM:SS
。该矩阵的行与列之间的间隔不比其列之间的间隔大(例如,第3列是每个时间戳的第一个
字符)

您当然可以将此数组拆分回一个单元格数组,其中每个单元格元素都是一个时间戳,然后可以返回到源单元格数组中。要执行此操作,请使用
mat2cell

BodytimeCell = mat2cell(Bodytime,size(time));
然而,在你已经做的事情中可能有不必要的复杂性。最简单的是,如果您的目标是时间戳字符串的单元格数组,则可以直接使用
cellfun

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

但是,您也可以考虑将时间戳存储为字符串是否真的有帮助。将它们存储为一种格式可能更为有利,它可以记住要显示它的格式,同时还允许您在需要时以数字方式处理该值


数据的整体结构也表明,存储为一个数组可能比存储单元数组更好。这为您提供了与数据交互的更自然的方式—例如,表中的数字列可以直接被视为数字数组,而不必从数字的单元格数组进行转换。

您不能将它们组合在一起吗?我的意思是,您可以通过执行类似于[new_column,old_cell_array]的操作将列连接到前面;你就不能把它们放在一起吗?我的意思是,您可以通过执行类似于[new_column,old_cell_array]的操作将列连接到前面@Josh-仔细阅读最后一段,这是解决您的问题的最佳方案problem@Josh-仔细阅读最后一段,这是解决您问题的最佳方法