Matlab regexp分割时间数组并节省时间输出以进行绘图

时间:2014-02-11 16:14:10

标签: matlab sorting time delimiter

我正在尝试在matlab中循环一组日期/时间,使用带有以下分隔符('/'或':'或'。')的regexp拆分每一列,并将每列分别存储为年份,日,小时,分钟,秒,ss,分别。最后,我试图将这个Julian日期和时间数组转换为matlab中的 plot -able格式。到目前为止,我已经能够遍历我的数组'time'并创建了一个名为'clean2_time'的新1x6单元,它根据分隔符将每行分成6列(年,日,小时,分钟,秒,ss) '/'':'和'。'。我的问题是循环会在每次迭代时覆盖'clean2_time',而我只留下最后一行的最后1x6时间戳。我尝试创建一个全零的'z'的新变量,并设置'clean2_time'等于z,但没有运气。

'时间'样本:

'2013/231/21:38:09.856619'
'2013/231/21:38:09.955640'
'2013/231/21:38:10.156685'
'2013/231/21:38:10.356550'
'2013/231/21:38:10.556770'
'2013/231/21:38:10.756565'
'2013/231/21:38:10.955627'
'2013/231/21:38:11.256588'
'2013/231/21:38:11.556649'
'2013/231/21:38:11.955597'
'2013/231/21:38:12.356627'
'2013/231/21:38:12.856557'
'2013/231/21:38:13.356558'
'2013/231/21:38:14.156530'
'2013/231/21:38:14.970500'
'2013/231/21:38:16.256545'
'2013/231/21:38:16.266736'
'2013/231/21:38:18.156398'

我到目前为止尝试过的代码:

z=zeros(size(time,1),6);
for i = 1:size(time,1)  % for i = 1 to 5922
    clean2_time = regexp(time{i,1}, '[/:.]', 'split');
    z{i,1} = clean2_time(i,1)
    z{i,2} = clean2_time(i,2)
    z{i,3} = clean2_time(i,3)
    z{i,4} = clean2_time(i,4)
    z{i,5} = clean2_time(i,5)
    z{i,6} = clean2_time(i,6)
end

2 个答案:

答案 0 :(得分:0)

clean2_time=zeros(size(time,1),6);
for i = 1:size(time,1)  % for i = 1 to 5922
    clean2_time(i,:)=regexp(time{i,1}, '[/:.]', 'split')
end

clean2_time(i,:)索引单元格的第i行。

答案 1 :(得分:0)

您走在正确的轨道上,但是,您不需要for循环。

只需这样就足够了:

clean2_time=regexp(time, '[/:.]', 'split');

然后clean2_time是一个单元结构,其中每一行包含另一个1x6单元阵列。然后,您可以使用clean2_time{row}{column}访问不同的值。如果你真的希望clean2_time是一个nx6数字矩阵而不是这个字符串的单元格数组,只需使用它来重塑:

clean2_time=cellfun(@str2num,vertcat(clean2_time{:}))