On Thu, Jun 30, 2011 at 11:32 AM, Thomas K Gamble <tkgamble@windstream.net> wrote:
I'm trying to convert some IDL code to python/numpy and i'm having some
trouble understanding the rules for boradcasting during some operations.
example:

given the following arrays:
a = array((2048,3577), dtype=float)
b = array((256,25088), dtype=float)
c = array((2048,3136), dtype=float)
d = array((2048,3136), dtype=float)

do:
a = b * c + d

In IDL, the computation is done without complaint and all array sizes are
preserved.  In ptyhon I get a value error concerning broadcasting.  I can
force it to work by taking slices, but the resulting size would be a =
(256x3136) rather than (2048x3577).  I admit that I don't understand IDL (or
python to be honest) well enough to know how it handles this to be able to
replicate the result properly.  Does it only operate on the smallest
dimensions ignoring the larger indices leaving their values unchanged?  Can
someone explain this to me?


I don't see a problem

In [1]: datetime64('now')
Out[1]: numpy.datetime64('2011-07-01T07:18:35-0600')

In [2]: a = array((2048, 3577), float)

In [3]: b = array((256, 25088), float)

In [4]: c = array((2048, 3136), float)

In [5]: d = array((2048, 3136), float)

In [6]: a = b*c + d

In [7]: a
Out[7]: array([   526336.,  78679104.])

What is the '*' in your expression supposed to mean?

Chuck