MATLAB: Filling up an m X n X o size matrix without loops

MATLABmatricesmatrix manipulation

Hi,
I am looking for an efficient way to 'fill up' a three-dimensional (m by n by o size) matrix M with elements based on a simple rule.
I have a number of matrices of size m X n X 1. I want the matrix M to contain weighted sums of these m X n X 1 size matrices. The weighted sums are obtained by the general formula
M(:,:,i) = f1(A, theta(i)) + f2(B, theta(i)) + f3(C, theta(i)) + ...
where f1, f2, f3, etc… are arbitrary functions and A, B, C, etc… are the m X n X 1 size matrices. theta is a 1 X o size vector containing angles (the functions f1, f2… are trigonometrical functions). The functions f1, f2… apply elementwise operations on A, B,… using a single value of theta, thus their outputs are also m X n X 1.
I can fill the matrix M up by looping through i=1:o and inserting the appropriate level M(:,:,i). However I feel that there must be a vectorized solution that works much faster.
I'd appreciate if you could give me ideas where to look for this functionality.
Thanks a lot,
Paul

Best Answer

I doubt that the loop over i is what's slowing you down. My bet is that it's the evaluation of f1(A,theta), f2(B,theta), etc.... However, one possibility to avoid the loop over i is as follows;
theta=reshape(theta,1,1,[]);
M = bsxfun(f1,A, theta) + bsxfun(f2,B, theta) + bsxfun(f2,C, theta)...
It still seems to me that you need a loop over f1,f2,f3, etc... but a vectorized solution to that will require knowledge of what those functions look like.