[Numpy-discussion] product of arrays of different lengths

Francesc Alted faltet@pytables....
Mon Sep 15 05:25:27 CDT 2008


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


More information about the Numpy-discussion mailing list