find mean for each 4 row in 124x7 matrix

조회 수: 1 (최근 30일)
nada
nada 2019년 1월 20일
댓글: nada 2019년 1월 21일
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

채택된 답변

madhan ravi
madhan ravi 2019년 1월 20일
편집: madhan ravi 2019년 1월 20일
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
madhan ravi
madhan ravi 2019년 1월 21일
"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 2019년 1월 21일
That's wonderful ......thank you again

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

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

댓글을 달려면 로그인하십시오.

Community Treasure Hunt

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

Start Hunting!

Translated by