我有一个文本文件,其中两个列包含空格分隔的数字数据。数据被分成几个段,其中每个段包含一个变量的行数,下一个段的开头由一行的表示(因此下面的数据将由四个段组成):
5.1
空间0.0
9.2
空间1.4
3.7
空间0.6
...
空间...
...
空间...
...
空间...
NaN
空间NaN
9.7
空间6.3
1.4
空间1.0
...
空间...
...
空间...
NaN
空间NaN
8.7
空间0.0
5.1
空间7.4
3.7
空间2.6
...
空间...
NaN
空间NaN
1.7
空间8.4
...
空间...
等等..。
现在,我想要生成一个图表,显示文件中每个数据段的曲线(通过将每个片段1st
列与其2nd
列进行绘图)。
我知道怎么做如果
当有可变的段大小和未知的段数时,如何有效地做到这一点?
发布于 2013-05-14 09:18:34
我生成了一些类似于您的文件的随机数据。您所描述的文本文件可以像这样加载(load
正确地处理NaNs):
Data = load(filename, '-ascii');
我知道这段代码并不完美,但它适用于由NaNs分隔的任意数量的段。
% 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
如果你需要解释的话请告诉我。
https://stackoverflow.com/questions/16548292
复制相似问题