find mean for each 4 row in 124x7 matrix

1 vue (au cours des 30 derniers jours)
nada
nada le 20 Jan 2019
Commenté : nada le 21 Jan 2019
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

Réponse acceptée

madhan ravi
madhan ravi le 20 Jan 2019
Modifié(e) : madhan ravi le 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 commentaires
madhan ravi
madhan ravi le 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 le 21 Jan 2019
That's wonderful ......thank you again

Connectez-vous pour commenter.

Plus de réponses (1)

Image Analyst
Image Analyst le 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 commentaires
nada
nada le 20 Jan 2019
Thank you
but the result was not the elements mean
Image Analyst
Image Analyst le 21 Jan 2019
It most certainly was. I just double checked it. Check your numbers again.

Connectez-vous pour commenter.

Community Treasure Hunt

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

Start Hunting!

Translated by