我有一个大小约为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.
答案 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,[]).');