To "subtract" two matrices with different dimensions in Octave (Matlab) I have matrix and need to subtract another matrix element by element on each row. Something like this:
$$
\begin{pmatrix}
x_{1} &  x_{2}\\
x_{3} &  x_{4}\\
\vdots & \vdots\\
x_{n-1} &  x_{n}\\
\end{pmatrix}
-
\begin{pmatrix}
y_{1} &  y_{2}\\
\end{pmatrix}
$$
So end result should be something like:
$$
\begin{pmatrix}
x_{1} - y_{1} &  x_{2} - y_{2}\\
x_{3} - y_{1} &  x_{4} - y_{2}\\
\vdots & \vdots\\
x_{n-1} - y_{1} &  x_{n} - y_{2}\\
\end{pmatrix}
$$
How to do this? How to do this in Octave, Matlab?
Sorry for noob question. Also would be very kind if you pint me where to read about this.
 A: With the current version (3.6) of Octave, simply subtracting will work
> a = [1 2; 3 4; 5 6; 7 8]
> b = [1 -1]
> a - b
ans =

   0   3
   2   5
   4   7
   6   9

Edit: Apparently this will also work in Matlab starting with the upcoming release (2016b).
A: Solution from Stackoveflow - https://stackoverflow.com/a/1773119/38975
bsxfun(@minus, X, y);

A: If your matrices are only two columns, here's a nasty way to do it:
>> a = [1 2; 3 4; 5 6; 7 8]
>> b = [1 -1]

>> [a(:,1)-b(1),a(:,2)-b(2)]
ans =

   0   3
   2   5
   4   7
   6   9

I suspect there's a better way though ...
A: The following is also a Kronecker product shortcut and is quite general: Suppose your $X,y_1,y_2$ is in the workspace, then
result = X - kron(ones(size(X,1),1),[y1 y2]);

gives you the ... result :)
A: Another way to do it is by outer product:
> a = [1 2; 3 4; 5 6; 7 8]
> b = [1 -1]
> a - ones(4,1)*b

This easily gets nastier to express with outer products if you start having 3,4 or even more dimensions and want to replicate any subset of them though.
