bsxfun. It is rather helpful, and fast too as illustrated below. Usage can be found at Matlab documentation (ofcourse!) or an example as below. It is called in a way a little similar to the late (deprecated)
blockproc) function with an argument as a function. The “@fun” part.
The example here basically computes the difference, B is subtracted from each row of A.
>> A = rand(1000,3);
>> B = rand(1,3);
>> tic; C1 = bsxfun(@minus,A,B); toc;
Elapsed time is 0.003523 seconds.
>> tic; C2 = A - ones(1000,1)*B; toc;
Elapsed time is 0.090703 seconds.
Note that it performs the subtraction on the columns, (length 3). In case you specify B as
B = rand(1000,1) then it will perform the subtraction on the rows (length 1000).
Another way to achieve the same operation, without using a loop, would be using
repmat, but it is the slowest of them all. Ofcourse, you should NOT even think of using a loop for such a thing in Matlab!