how to average specific rows of all columns?

i am having 100x32 matrix in my data set. i would like to average 20 rows of all columns, like first 20rows average, next 20 and so..on...
can any one help in this problem.

 Accepted Answer

If I understand your question correctly, you can use the movmean command:
% Some made-up data
A = rand(100,32);
N = 20;
movingAverageA = movmean(A,[(N-1) 0]); % Trailing average of N rows
output = movingAverageA(N:N:end,:);

3 Comments

sir, i get an error called undefined function "movmean"... since i am using 2013 version may be this error occured.. can you send one more answer for 2013th version (32 bit).. my output matrix is 5x32.
Did you get it working? You've accepted this answer so I assume so.
in my version its not woking..so i am trying latest version...

Sign in to comment.

More Answers (2)

to take a moving average of 1 to 20 rows, then 21-40 rows, then 41-60 rows etc.
of a data matrix with n rows and m columns.
you may also try:
for i=1:(n/20) % given that n is a multpile of 20 or your choice of no. of rows to average.
a=(i-1)*20+1;
b=(i-1)*20+20;
meandata(i,:) = mean(data(a:b,:),1);
end
The first index are the rows. For example to average only the first 20 rows
columnMeans = mean(data([1:20], :), 1);
Or to average rows 34, 23, and 194, do
rowsToAverage = [34, 23, 194];
columnMeans = mean(data(rowsToAverage, :), 1);

2 Comments

This seems to work:
data = randi(9, 100, 32) % Sample 100x32 data
columnMeans = [
mean(data([1:20], :), 1);
mean(data([21:40], :), 1);
mean(data([41:60], :), 1);
mean(data([61:80], :), 1);
mean(data([81:100], :), 1)]
Is that what you want?

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!