How to read values for the range between each maximum and each minimum from a large uneven data file?

2 Ansichten (letzte 30 Tage)
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.

Akzeptierte Antwort

per isakson
per isakson am 27 Jul. 2020
Bearbeitet: per isakson am 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 Kommentare
per isakson
per isakson am 27 Jul. 2020
Bearbeitet: per isakson am 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
>>

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by