日期和时间字符串快速到数字数组
可以使用 datenum
将日期和时间字符串转换为数字数组,尽管读取大型数据文件可能需要一半的时间。
考虑示例 Textscan 中的数据。再次,通过使用文本扫描并将日期和时间解释为整数,它们可以快速转换为数字数组。
即示例数据中的一行将被解释为:
Data , 2015 - 09 - 16 , 15 : 41 : 52 ; 801 , 800.000000 , 1.5123 , 0.0043
ignore double double double double double double double double double double
这将被解读为:
fid = fopen('path/to/myfile');
data = textscan(fid,'%*s %f %f %f %f %f %f %f %f %f %f','Delimiter',',-:;');
fclose(fid);
现在:
y = data{1}; % year
m = data{2}; % month
d = data{3}; % day
H = data{4}; % hours
M = data{5}; % minutes
S = data{6}; % seconds
F = data{7}; % milliseconds
% Translation from month to days
ms = [0,31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];
n = length(y); % Number of elements
Time = zeros(n,1); % Declare numeric time array
% Algorithm for calculating numeric time array
for k = 1:n
Time(k) = y(k)*365 + ms(m(k)) + d(k) + floor(y(k)/4)...
- floor(y(k)/100) + floor(y(k)/400) + (mod(y(k),4)~=0)...
- (mod(y(k),100)~=0) + (mod(y(k),400)~=0)...
+ (H(k)*3600 + M(k)*60 + S(k) + F(k)/1000)/86400 + 1;
end
在 566,678 个元素上使用 datenum
需要 6.626570 秒,而上述方法需要 0.048334 秒,即 datenum
的时间为 0.73%或快〜137 倍。