How can I express this large number of computations without for loops?

  • A+
Category:Languages

I work primarily in MATLAB but I think the answer should not be too hard to carry over from one language to another.

I have a multi-dimensional array X with dimensions [n, p, 3]. I would like to calculate the following multi-dimensional array.

T = zeros(p, p, p) for i = 1:p for j = 1:p for k = 1:p T(i, j, k) = sum(X(:, i, 1) .* X(:, j, 2) .* X(:, k, 3)); end end end 

The sum is of the elements of a length-n vector. Any help is appreciated!

 


You only need some permuting of dimensions and multiplication with singleton expansion:

T = sum(bsxfun(@times, bsxfun(@times, permute(X(:,:,1), [2 4 5 3 1]), permute(X(:,:,2), [4 2 5 3 1])), permute(X(:,:,3), [4 5 2 3 1])), 5); 

From R2016b onwards, this can be written more easily as

T = sum(permute(X(:,:,1), [2 4 5 3 1]) .* permute(X(:,:,2), [4 2 5 3 1]) .* permute(X(:,:,3), [4 5 2 3 1]), 5); 

Comment

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: