[Numpy-discussion] product of arrays of different lengths

SimonPalmer simon.palmer at gmail.com
Mon Sep 15 07:01:29 EDT 2008


nice, much neater, thanks

On Sep 15, 11:25 am, Francesc Alted <fal... at pytables.org> wrote:
> A Monday 15 September 2008, SimonPalmer escrigué:
>
>
>
> > I have two 1D arrays of different lengths and I want the calculate
> > sum of the product of the two to the extent of the smaller of them
> > (make sense?).  I don't know which of the two will be the longer
> > ahead of time.
>
> > I expected (hoped) to be able to do this:
>
> > sp = (A * B).sum()
>
> > and imagined that the trailing end of the longer of the two arrays
> > might just be ignored, but instead I get an error "objects cannot be
> > broadcast to a single shape".
>
> > Both arrays are generally very short (<100 elements) so I can
> > tolerate a copy, however this calculation is right in the heart of
> > the innermost loop in my code, so I have to tread a bit carefully.
>
> > Here's what I do at the moment, which is ugly, but works
>
> >         max_idx = min(len(A), len(B))
> >         total_product = 0
> >         for idx in range(0, max_idx):
> >             total_product += A[idx] * B[idx]
>
> > ...but this is numpy, so I'm looking for a neat way.
>
> If I understand you correctly, maybe the next is what you want:
>
> max_idx = min(len(A), len(B))
> (A[:max_idx] * B[:max_idx]).sum()
>
> which does not require a copy becuase the [:max_idx] operator returns
> just a view of the arrays.
>
> Hope that helps,
>
> --
> Francesc Alted
> _______________________________________________
> Numpy-discussion mailing list
> Numpy-discuss... at scipy.orghttp://projects.scipy.org/mailman/listinfo/numpy-discussion



More information about the NumPy-Discussion mailing list