How to read values for the range between each maximum and each minimum from a large uneven data file?
1 view (last 30 days)
Show older comments
Hi,
I have a data file with 11000 rows and 4 columns. I need to read all values (in all columns) for data between each maximum and each minimum of column 3. Integrate column 3 and column 4, and calculate the mean of column 2, for each range between the maximum and minimum of column 3. Do I make sense?? I am really unsure about how to start. I am using Matlab2015a. I have attached what I want to do as image. For rudimentary case I can do like shown on the right in figure. But it would take a decade to solve. Need help.
2 Comments
Accepted Answer
per isakson
on 27 Jul 2020
Edited: per isakson
on 27 Jul 2020
"range between the maximum and minimum of column 3" with a bit of guessing my interpretation is implemented in ixb and ixe
%%
fid = fopen('axn.txt','r');
cac = textscan( fid, '%f%f%f%f', 'CollectOutput',true );
num = cac{1};
[~] = fclose( fid );
%%
ixb = [ 1; find(diff(num(:,3))>0)+1 ]; % beginning of section
ixe = [ ixb(2:end)+1; size(num,1) ]; % end of section
%%
len = length( ixb );
result = nan( len, 2 );
for jj = 1 : len
result(jj,1) = mean(num(ixb(jj):ixe(jj),2));
result(jj,2) = trapz(num(ixb(jj):ixe(jj),3),num(ixb(jj):ixe(jj),4));
end
outputs
>> result
result =
51.494 -10.433
51.472 -23.332
51.479 -0.95127
51.463 -29.865
>>
3 Comments
per isakson
on 27 Jul 2020
Edited: per isakson
on 28 Jul 2020
Is this better?
>> result
result =
51.492 -24.937
51.463 -29.865
51.472 -24.485
51.463 -29.865
>>
My mistake. Replace
ixe = [ ixb(2:end)+1; size(num,1) ];
by
ixe = [ ixb(2:end)-1; size(num,1) ];
with a minus one, not plus.
Now the beginings and ends of the "sections" agree with my intention
>> ixb', ixe'
ans =
1 6 12 18
ans =
5 11 17 23
>>
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!