-2

我一天有一个文件,一个月30个文件。每个文件包含86400行,数据格式如下: Hour Min Sec Value1 Value2 Value3 ......但是,该文件包含很多缺失行。因此使用插值检查每个文件以插入缺失的行变得很乏味。稍后,我必须一个接一个地附加一个文件才能为每个月制作一个大文件(= 86400 * 30 行)。请给我任何建议可以补偿时间和劳动力的代码。

4

1 回答 1

1

要将所有文件和堆栈数据读取到 form B,您可以对文件名使用循环:

 for d = 1:30
     filename = sprintf('file%d.txt', d );
     A{ d } = load( filename );
     % complete missing values in A{d} here, for example using interpMissingRows below
     A{ d } = interpMissingRows( A{ d } );
 end
 B = vertcat( A{:} ); 

要计算丢失的条目,您可以插值:

function interpData = interpMissingRows( data )
% compute seconds from 00:00:00 (assuming first entry is 0, 0, 0, val1 val2...
absSec = data(:,1:3) * [ 3600; 60; 1]; % matrix multiplication!
numValues = size(data,2) - 3; % number of colums to interpolate
totSec = 24*3600; % number of seconds in 24Hours
interpData = zeros(totSec, 3 + numValues ); % pre-allocate
interpData(:,1) = floor( (0:totSec-1)' / 3600 ); % hours
interpData(:,2) = floor( ( (0:totSec-1)' - interpData(:,1)*3600 ) / 60 ); % minutes
interpData(:,3) = mod(  (0:totSec-1)', 60 ); % seconds
interpData(:, 4:end) = interp1( absSec, data(:, 4:end), (0:totSec-1)', 'linear','extrap');
于 2013-08-12T06:33:46.740 回答