我在Matlab中的数据(单元格)如下所示:
00.00.00.515
00.00.00.671
00.00.00.828
00.00.00.984
00.00.01.140
etc.
这是时间戳:HH:MM:SS:TTT,T代表千分之一(=毫秒)。毫秒很重要,因为步长很小。如何将此数据(单元格)转换为数据Matlab可以处理(双重)? 所以数据如下:
0.515
0.671
0.828
0.984
1.140
etc.
应将分钟和小时转换为秒,以便轻松计算数据的总时间或平均步长。所以:
01.30.00.000
将是:
5400.000
秒
谢谢!
答案 0 :(得分:4)
假设您的单元格数组包含字符串:
ts = {'00.00.00.515'
'00.00.00.671'
'00.00.00.828'
'00.00.00.984'
'00.00.01.140'};
可以按如下方式完成:
>> cell2mat(cellfun(@(c) sscanf(c,'%d.%d.%f').', ts, 'uniformout', 0)) * [3600 60 1].'
ans =
0.5150
0.6710
0.8280
0.9840
1.1400
这使用cellfun
将每个单元格转换为sscanf
的数字行向量,然后将所有这些vectos连接成一个cell2mat
的矩阵;并且fianlly应用矩阵乘法来计算时间。
如果数字位数不固定,代码也可以使用。例如:
>> ts = {'0.1.00.51'};
>> cell2mat(cellfun(@(c) sscanf(c,'%d.%d.%f').', ts, 'uniformout', 0)) * [3600 60 1].'
ans =
60.5100