[Numpy-discussion] Efficiently defining a multidimensional array
Damian Eads
eads at soe.ucsc.edu
Thu Aug 27 17:52:34 EDT 2009
Hi Jonathan,
This isn't quite your typical linear algebra. NumPy has a nice feature
called array broadcasting, which enables you to perform element-wise
operations on arrays of different shapes. The number of dimensions of
the arrays must be the same, in your case, all the arrays must have
three dimensions. The newaxis keyword is useful for creating a
dimension of size one.
import numpy as np
A=np.random.rand(m,n)
B=np.random.rand(n,k)
# Line up the axes of size>1 by creating a new axis for each array.
C=A[:,:,np.newaxis] + B[np.newaxis,:,:]
# This is equivalent to the much slower triple for-loop
TC=np.zeros((m,n,k))
for x in xrange(0,m):
for y in xrange(0,n):
for z in xrange(0,k):
TC[x,y,z]=A[x,y]+B[y,z]
# This should be true.
print (TC==C).all()
I hope this helps.
Damian
On Thu, Aug 27, 2009 at 3:09 PM, Jonathan T<terhorst at gmail.com> wrote:
> Hi,
>
> I want to define a 3-D array as the sum of two 2-D arrays as follows:
>
> C[x,y,z] := A[x,y] + B[x,z]
>
> My linear algebra is a bit rusty; is there a good way to do this that does not
> require me to loop over x,y,z? Thanks!
>
> Jonathan
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
--
-----------------------------------------------------
Damian Eads Ph.D. Candidate
University of California Computer Science
1156 High Street Machine Learning Lab, E2-489
Santa Cruz, CA 95064 http://www.soe.ucsc.edu/~eads
More information about the NumPy-Discussion
mailing list