File Exchange

## BLOCKFUN applies function on sub blocks of an array

version 1.0.0.0 (1.38 KB) by
partition an ND-array into sublocks and then applies a function on each block

Updated 22 Oct 2007

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 !

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 (2021). 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 .

Mathias Ortner

I updated the file to take care of Us comments.
The author

urs (us) schwarz

good help with representative examples, nice error checks using the newly introduced ASSERTion routine, and an interesting, sleek computational engine WOULD make this contribution a very nice add-on - IF it wasn't for the enormous(!) amount of memory it needs during its intermediary steps (always of type double, even if the input is of a smaller data type), which - most unfortunately - makes this function almost unusable for even moderately big real-world problems, eg, a 3d set of mri scans of size
512x512x20 (uint16)

us

##### MATLAB Release Compatibility
Created with R2007a
Compatible with any release
##### Platform Compatibility
Windows macOS Linux