find mean for each 4 row in 124x7 matrix

2 views (last 30 days)
Hi all ,,,
I have matrix U=124 x 7
I want to find the mean through all 4 rows of each column
the result be 31 x7

Accepted Answer

madhan ravi
madhan ravi on 20 Jan 2019
Edited: madhan ravi on 20 Jan 2019
b=mat2cell(U,repmat(4,1,size(U,1)/4)); % where U is 124 X 7 matrix
R=cellfun(@(x) mean(x),b,'un',0);
Result=vertcat(R{:})
  3 Comments
madhan ravi
madhan ravi on 21 Jan 2019
"if there is a simple loop to do that.."
[m,n]=size(U);
Result=zeros(m/4,n);
for k = 1:m/4
Result(k,:)=mean(U(k*4-3:k*4,:));
end
nada
nada on 21 Jan 2019
That's wonderful ......thank you again

Sign in to comment.

More Answers (1)

Image Analyst
Image Analyst on 20 Jan 2019
You can do it in as little as two lines of code with blockproc() from the Image Processign Toolbox:
U = randi(9, 124, 7); % Original sample data
% Define the function that we will apply to each block.
% This function will return a value that is the mean of the elements in the block.
% Output array will be 31 by 7.
meanFilterFunction = @(theBlockStructure) mean(theBlockStructure.data(:));
% Block process the image to replace every pixel in the
% 4 pixel by 1 pixel block by the mean of the pixels in the block.
blockSize = [4 1];
blockMeanArray = blockproc(U, blockSize, meanFilterFunction); % Works.
blockproc() moves along in "jumps" of the block size that you specify - it does not slide over by one element at a time like conv2() does. If you'd used conv2() you would have to subsample the result.
  2 Comments
nada
nada on 20 Jan 2019
Thank you
but the result was not the elements mean
Image Analyst
Image Analyst on 21 Jan 2019
It most certainly was. I just double checked it. Check your numbers again.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!