I have a 32 * 32 matrix .i want to take mean of each 4*4 so that the matrix is reduced to 8*8 array. Can anyone help me how to do that?

10 次查看(过去 30 天)
please help me how to take mean of specified dimension from a large array.

采纳的回答

Andrei Bobrov
Andrei Bobrov 2017-10-20
编辑:Andrei Bobrov 2017-10-20
Try use blockproc from Image Processing Toolbox
out = blockproc(A,[4 4],@(x)mean(x.data(:)));
variant without Image Processing Toolbox
[m,n] = size(A);
k = [4 4];
[ii, jj] = ndgrid(ceil((1:m)/k(1)),ceil((1:n)/k(2)));
out1 = accumarray([ii(:),jj(:)],A(:),[],@mean);
other variant
[m,n] = size(A);
k = [4 4];
C = mat2cell(A,k(1)*ones(m/k(1),1),k(2)*ones(n/k(2),1));
out = cellfun(@(x)mean(x(:)),C);

更多回答(1 个)

KSSV
KSSV 2017-10-20
A = rand(32,32) ;
m = 4 ; n = 4 ;
l = size (A) ./ [m n];
T = mat2cell (A, repmat (m, l(1), 1), repmat (n, l (2), 1));
M = cellfun(@mean,T,'un',0) ;
M = cellfun(@mean,M,'un',0) ;
M = cell2mat(M)

类别

Help CenterFile Exchange 中查找有关 Resizing and Reshaping Matrices 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by