我生成了一些与您的文件类似的随机数据。像您描述的那样的文本文件可以像这样加载(load
正确处理 NaN):
Data = load(filename, '-ascii');
我知道这段代码并不完美,但它适用于由 NaN 分隔的任意数量的段。
% Here I generate some random points to test the code
NPoints = 100;
Data = rand(NPoints,2);
% Insert NaNs in both columns
Data( Data(:,1)>0.9, : ) = NaN;
% Now do some magic
idxNaN = find( isnan( Data(:,1) ) );
idxNearNaNs = [ idxNaN-1 idxNaN+1 ]';
SegmentStartEnd = reshape( [1;idxNearNaNs(:);NPoints] , 2, [] )';
SegmentsOK = ( SegmentStartEnd(:,2) - SegmentStartEnd(:,1) ) >= 0;
SegmentStartEnd( ~SegmentsOK,:) = [];
% SegmentStartEnd contain start and end rows of good segments
NumberOfSegments = size(SegmentStartEnd,1);
fprintf('NaNs positions: %s\n', sprintf('%g ',idxNaN));
fprintf('%d segments found\n', NumberOfSegments);
% Now plot the data
figure;
hold all;
for k=1:NumberOfSegments
SegmentStart = SegmentStartEnd(k,1);
SegmentEnd = SegmentStartEnd(k,2);
fprintf('Segment #%04d: Rows %04d to %04d\n', k, SegmentStart,SegmentEnd);
plot( Data(SegmentStart:SegmentEnd,1) , Data(SegmentStart:SegmentEnd,2) );
end
如果您需要一些解释,请告诉我。