[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Use of bsxfun
From: |
Bård Skaflestad |
Subject: |
Re: Use of bsxfun |
Date: |
Thu, 22 Sep 2011 14:18:02 +0200 |
On Thu, 2011-09-22 at 10:00 +0200, Juan Pablo Carbajal wrote:
> Not long ago JordiGH show me how to exploit the use of bsxfun. However
> I am having troubles using it
> Shouldn't the output of this call
>
> > bsxfun (@ (x,y) x * y, [1 -1; 2 -2], [6 6; 3 3])
>
> be [6 -6; 6 -6] and not [3 3; 6 6]? (The latter is what I get)
Your example demonstrates a slight deficiency in the BSXFUN interface.
To quote from the help text (in Octave 3.2.3, it may have changed in
later releases):
Loadable Function: bsxfun (F, A, B)
Applies a binary function F element-wise to two matrix arguments
A and B. ...
In this respect, your expectation ([6, -6; 6, -6]) is reasonable.
However, as the inputs 'A' and 'B' are (square) matrices, you are
effectively calling
bsxfun(@mtimes, A, B)
which reduces to 'A * B' (i.e., ordinary matrix multiplication). If you
want to apply element-by-element multiplication, you should be using
'array multiply', i.e., the @times function or spelled equivalently
@(x,y) x.*y
I can't really decide if calling BSXFUN with @MTIMES should be an error
or not. There are good arguments for both sides.
Sincerely,
--
Bård Skaflestad <address@hidden>
SINTEF ICT, Applied Mathematics
- Use of bsxfun, Juan Pablo Carbajal, 2011/09/22
- Re: Use of bsxfun,
Bård Skaflestad <=