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);
  2 件のコメント
bidlee devi
bidlee devi 2020 年 2 月 12 日
out = blockproc(A,[4 4],@(x)mean(x.data(:)));
I got the desired results. Reduction of 32by32 to 8by8.
How can I subtract each elements of 4by4 of A from its respective means? Thanks.

サインインしてコメントする。

その他の回答 (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 Center および File ExchangeResizing and Reshaping Matrices についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by