字符串单元格数组由分隔符分割为整数数组

时间:2017-03-22 21:43:39

标签: matlab date split cell-array

我有一个大小约为900k x 1的单元格数组,其中包含'5/13/2015 23:53'格式的日期。我试图创建一个长度相同的整数数组,其中只包含每个日期单元格中的小时数。什么是最快/最好的方法呢?

修改我只能访问以下工具箱:

MATLAB                                                Version 8.6         (R2015b)
Simulink                                              Version 8.6         (R2015b)
Control System Toolbox                                Version 9.10        (R2015b)
DSP System Toolbox                                    Version 9.1         (R2015b)
Image Processing Toolbox                              Version 9.3         (R2015b)
Instrument Control Toolbox                            Version 3.8         (R2015b)
Optimization Toolbox                                  Version 7.3         (R2015b)
Signal Processing Toolbox                             Version 7.1         (R2015b)
Simulink Control Design                               Version 4.2.1       (R2015b)
Statistics and Machine Learning Toolbox               Version 10.1        (R2015b)
Symbolic Math Toolbox                                 Version 6.3         (R2015b)

EDIT2:

tic
datesmat = datevec(Dates);
hours = datesmat(:,4);
toc

tic
Hours = cell2mat(cellfun(@(x) str2double(x(end-4:end-3)), Dates, 'UniformOutput', false));
toc

Elapsed time is 90.233473 seconds.
Elapsed time is 14.168023 seconds.

3 个答案:

答案 0 :(得分:3)

您可以使用hour方法。

示例:

Hour = hour({'5/13/2015 21:53', '5/13/2015 23:53'})

结果:

Hours =

    21    23

没有金融工具箱的示例:

Dates = {'5/13/2015 21:53', '5/13/2015 23:53'};

Hours = cell2mat(cellfun(@(x) str2double(x(end-4:end-3)), Dates, 'UniformOutput', false));

答案 1 :(得分:3)

date = {'5/13/2015 23:53';'5/13/2015 23:53'};
[~,~,~,hours,~,~] = datevec(date); % Extract only the hours

如果您没有财务工具箱,则可以为每个日期使用datevec,其第四个元素将是小时。

(我怀疑财务工具箱的hour方法做了类似的事情。)

答案 2 :(得分:0)

使用逻辑索引的矢量化解决方案:

B = char(Dates).';
f = B ==':';
x=circshift(f,-1)|circshift(f,-2);
result = str2double(reshape(B(x),2,[]).');