Multiple selection of an array

2 Ansichten (letzte 30 Tage)
Patrick Nijkamp
Patrick Nijkamp am 10 Feb. 2020
Hello everyone,
i have an array of 150.000 rows, and i want to take the means of 300 rows once every 1460 rows. for example mean of row 1100:1400 and mean of row 2560:2860.
M = mean([
flow(1100:1400);
flow(2560:2860);
flow(4020:4320); ])
i have to take 100 means, but i only get 1 output when i use this. flow is the name of the array i use.

Akzeptierte Antwort

fred  ssemwogerere
fred ssemwogerere am 10 Feb. 2020
Hello, based on the indexing used in your question, i think something like this could do:
% Assuming your matrix or vector to be: "t", having 150,000 rows
t;
% Assume the starting index for averaging 300 rows at a defined interval to be; "i"
i=1100;
% Set interval over which to average every 300 rows
interval=1460; % interval over which the start of the next 300 rows will be chosen
% Number of rows from your matrix or vector; "t"
nrows=length(t);
% Using a "for" loop
for k=1:ceil(nrows/interval)
if i+300<=nrows % this condition prevents averaging beyond the length of the array
avg_flow(k,1)=mean(t(i:i+300,:));
else
end
i=i+interval;
end
% Please note the length of "avg_flow" will determine the total number of intervals taken for a given starting index.

Weitere Antworten (2)

Star Strider
Star Strider am 10 Feb. 2020
Using a simple loop:
Array = rand(150000,1); % Create Array
v = [1100 : 1460 : numel(Array)];
for k = 1:numel(v)
ArrayMean(k) = mean(Array((0:299)+v(k)));
end

Matt J
Matt J am 10 Feb. 2020
Bearbeitet: Matt J am 10 Feb. 2020
You can use sepblockfun downloadable from here
as follows
M=sepblockfun(flow,[300,inf])

Kategorien

Mehr zu Resizing and Reshaping Matrices finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by