按分隔符拆分为整数数组的字符串元胞数组
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,[]).');
我有一个大小约为 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,[]).');