File Exchange

image thumbnail

BLOCKFUN applies function on sub blocks of an array

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

1 Download

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

Comments and Ratings (2)

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

Community Treasure Hunt

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

Start Hunting!