A is a matrix of size 32*32.I want to subtract elements of each 4*4 block of A from their respective 4*4 means

1 Ansicht (letzte 30 Tage)
A is a matrix of size 32*32. out = blockproc(A,[4 4],@(x)mean(x.data(:)));
Using the above code, I am able to reduce A to 8*8 which is obtained by averaging each 4*4 blocks of A. Now, I want to subtract elements of each 4*4 block of A from their respective 4*4 means. Thanks !

Akzeptierte Antwort

Matt J
Matt J am 12 Feb. 2020
Bearbeitet: Matt J am 12 Feb. 2020
out = blockproc(A,[4 4],@(x)mean(x.data(:)));
result = A - repelem( out , 4,4);
  4 Kommentare
bidlee devi
bidlee devi am 13 Feb. 2020
After running the code
result1 = A - repelem( out , 4,4);
It says
"Undefined function 'repelem' for input arguments of type 'double'."

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Fangjun Jiang
Fangjun Jiang am 12 Feb. 2020
Bearbeitet: Fangjun Jiang am 12 Feb. 2020
A=rand(32);
out = blockproc(A,[4 4],@(x)mean(x.data(:)));
temp=repmat({ones(4,1)},8,1);
temp=blkdiag(temp{:});
Result=A-temp*out*temp'
%% or run below to see the effect
temp*magic(8)*temp'

Kategorien

Mehr zu Resizing and Reshaping Matrices finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by