[Numpy-discussion] broacasting question

Derek Homeier derek@astro.physik.uni-goettingen...
Thu Jun 30 13:11:45 CDT 2011

```On 30.06.2011, at 7:32PM, Thomas K Gamble 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?

If IDL does such operations silently I'd probably rather be troubled about it...
Assuming you actually meant something like "a = np.ndarray((2048,3577))" (because np.array((2048,3577), dtype=float) would simply be the 2-vector [ 2048. 3577.]), the shape of a indeed matches in no way the other ones.
While b,c,d do have the same total size, thus something like

b.reshape((2048,3136) * c + d

will work, meaning the first 8 rows of b b[:8] would be concatenated to the first row of the output, and so on...
Since the total size is still smaller than a, I could only venture something is done like