[Numpy-discussion] Broadcasting rules (Ticket 76).

Travis Oliphant oliphant.travis at ieee.org
Mon Apr 24 22:27:02 EDT 2006


Travis Oliphant wrote:
> Sasha wrote:
>> On 4/24/06, Travis Oliphant <oliphant.travis at ieee.org> wrote:
>>   I've attached a patch to the ticket:
>>
>> <http://projects.scipy.org/scipy/numpy/attachment/ticket/76/shape-check.patch> 
>>
>>   
> I don't think the patch will do your definition of  "the right thing" 
> (i.e. mirror broadcasting behavior) in all cases.  For example if "a" 
> is 2x3x4x5 and "b" is 2x1x1x5, then  a[...] = b will not fill the 
> right sub-space of "a" with the contents of "b".
>
>
> The PyArray_CopyInto gets called in a lot of places.  Have you checked 
> all of them to be sure that altering the semantics of copying (which 
> are currently different than broadcasting) will work correctly?  I 
> agree that one can demonstrate a slight in-consistency.  But, I'd 
> rather have the inconsistency and tell people that copying and 
> assignment is not a broadcasting ufunc, then feign consistency and 
> have it not quite right.
>


Of course, as I've said I'm not opposed to the consistency.


To do it "right", one should use PyArray_MultiIterNew which abstracts 
the concept of broadcasting into iterators (and uses the broadcastable 
checking code that's already written --- so you guarantee 
consistency).   I'm not sure what overhead it would bring.


But, special cases could be checked-for (scalar, and same-size arrays 
for example). 


I'm also thinking that copyswapn should grow stride arguments so that it 
can be used more generally.


-Travis





More information about the NumPy-Discussion mailing list