Take the 2-minute tour ×
Mathematics Stack Exchange is a question and answer site for people studying math at any level and professionals in related fields. It's 100% free, no registration required.

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.

share|improve this question
    
for loop is always a good start. –  picakhu Nov 29 '11 at 22:12
    
'for loop' is done :), now need more. I found solution - bsxfun(@minus, X, Y).. –  Mike Chaliy Nov 29 '11 at 22:16
    
@moderators, pls, close this topic, this mostly exact duplicate of the math.stackexchange.com/questions/5793/… –  Mike Chaliy Nov 29 '11 at 22:18

4 Answers 4

up vote 3 down vote accepted

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
share|improve this answer
    
In Octave (3.4) this gives an error: a - b error: operator -: nonconformant arguments (op1 is 4x2, op2 is 1x2) –  asmaier Oct 27 '13 at 19:15

Solution from Stackoveflow - http://stackoverflow.com/a/1773119/38975

bsxfun(@minus, X, y);
share|improve this answer
    
This works also in Octave 3.4 –  asmaier Oct 27 '13 at 19:23

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

share|improve this answer

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 :)

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.