按分隔符拆分为整数数组的字符串元胞数组

string cell array split by delimiter to integer array

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

编辑 我只能访问以下工具箱:

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)

编辑2:

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.

您可以使用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));
date = {'5/13/2015 23:53';'5/13/2015 23:53'};
[~,~,~,hours,~,~] = datevec(date); % Extract only the hours

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

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

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

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