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 回表示 (過去 30 日間)
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 !

採用された回答

Matt J
Matt J 2020 年 2 月 12 日
編集済み: Matt J 2020 年 2 月 12 日
out = blockproc(A,[4 4],@(x)mean(x.data(:)));
result = A - repelem( out , 4,4);
  4 件のコメント
bidlee devi
bidlee devi 2020 年 2 月 13 日
After running the code
result1 = A - repelem( out , 4,4);
It says
"Undefined function 'repelem' for input arguments of type 'double'."

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

その他の回答 (1 件)

Fangjun Jiang
Fangjun Jiang 2020 年 2 月 12 日
編集済み: Fangjun Jiang 2020 年 2 月 12 日
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'

カテゴリ

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