[Numpy-discussion] combinatorial operations on a pair of arrays

Emmanuelle Gouillart emmanuelle.gouillart at normalesup.org
Wed Nov 18 15:49:07 EST 2009


Hello Damien,

broadcasting can solve your problem (see
http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html):

(A[np.newaxis,:]**B[:,np.newaxis]).sum(axis=0)

gives the result you want.

(assuming "import numpy as np", which is considered as a better practice
as "from numpy import *")

Cheers,

Emmanuelle

On Wed, Nov 18, 2009 at 03:43:09PM -0500, Damien Moore wrote:
> ugh... I goofed. The code snippet should have read

> from numpy import *
> A=array([[1,2],[2,3],[3,4]])
> B=array([[2,2],[3,3]])
> C=zeros(A.shape)
> for i in xrange(len(A)):
>  C[i]=(A[i]**B).sum(0)
> print C


> On Wed, Nov 18, 2009 at 2:17 PM, Damien Moore <damienlmoore at gmail.com> wrote:
> > The title of this e-mail is probably misleading so let me just show some code:

> > from numpy import *
> > A=array([[1,2],[2,3],[3,4]])
> > B=array([[2,2],[3,3]])
> > C=zeros(A.shape)
> > for i in xrange(len(A)):
> >  C[i]=sum(A[i]**B)
> > print C

> > What I want to do is eliminate the for loop and rely on numpy
> > internals, but I'm not sure how to do this most efficiently.

> > The fundamental aspect of the operation is that the array C is
> > constructed by applying each subarray B to each subarray of A (i.e.
> > all permutations) and then summing over a subset.

> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion



More information about the NumPy-Discussion mailing list