BLOCKFUN applies function on sub blocks of an array

partition an ND-array into sublocks and then applies a function on each block
906 Downloads
Updated 22 Oct 2007

No License

BLOCKFUN applies a function on blocks of an array
Y=BLOCKFUN(X,S,funHandle) applies the function funHandle on blocks of size
S on the array X. Y is of size ceil(size(X)./S)

For instance, if X is of size [9 9] and S is [3 3], then
X is partitionned in 9 [3 3] blocks as follow :
| B1 | B4 | B7 |
| B2 | B5 | B8 | where Bi's are [3 by 3] matrices
| B3 | B6 | B9 |
Y is then a [3 by 3] matrix with
Y(i) = fun(Bi(:))

This function is just a simple wrap for accumarray !
See Also : accumarray

EXAMPLES :
rand('twister',12);
x=floor(2*rand(9,9))
x =
0 0 1 1 1 0 0 0 0
1 0 0 0 1 0 0 1 1
0 1 1 1 0 0 0 0 0
1 1 0 1 0 0 1 1 1
0 1 0 0 0 0 0 0 0
1 0 0 0 1 0 0 1 1
1 1 0 1 0 1 1 1 0
0 1 1 1 1 1 1 1 1
1 0 0 1 0 0 0 0 1

y=blockfun(x,[3 3],@sum)
y =
4 4 2
4 2 5
5 6 6

y=blockfun(x,[3 3],@median)
y =
0 0 0
0 0 1
1 1 1

y=blockfun(x,[5 5],@sum)
y =
12 5
11 10

x=floor(2*rand(6,6,6))
y=blockfun(x,[3 2 3],@(x) length(find(x>0))>4)

x=floor(2*rand(512,512,50));
tic; y=blockfun(x,[5 5 5],@sum); toc

Cite As

Mathias Ortner (2026). BLOCKFUN applies function on sub blocks of an array (https://www.mathworks.com/matlabcentral/fileexchange/17000-blockfun-applies-function-on-sub-blocks-of-an-array), MATLAB Central File Exchange. Retrieved .

MATLAB Release Compatibility
Created with R2007a
Compatible with any release
Platform Compatibility
Windows macOS Linux
Version Published Release Notes
1.0.0.0

Optimized a line,

this new (and hopefully last) version is even faster than the previous one.