I think this does what you want: def dim_weight(x): weights = x[0] volumes = x[1]*x[2]*x[3] return np.where(volumes>5184, volumes / 194.0, weights)
Best, Ken On 4/17/11 1:00 PM, Laszlo Nagy <gand...@shopzeus.com> wrote: > Message: 1 > Date: Sat, 16 Apr 2011 21:08:55 +0200 > From: Laszlo Nagy<gand...@shopzeus.com> > Subject: [Numpy-discussion] Beginner's question > To: Discussion of Numerical Python<numpy-discussion@scipy.org> > Message-ID:<4da9e947.7060...@shopzeus.com> > Content-Type: text/plain; charset=ISO-8859-2; format=flowed > > > Hi All, > > I have this example program: > > import numpy as np > import numpy.random as rnd > > def dim_weight(X): > weights = X[0] > volumes = X[1]*X[2]*X[3] > res = np.empty(len(volumes), dtype=np.double) > for i,v in enumerate(volumes): > if v>5184: > res[i] = v/194.0 > else: > res[i] = weights[i] > return res > > > # TEST > N = 10 > X = rnd.randint( 1,25, (4,N)) > print dim_weight(X) > > I want to implement the dim_weight() function effectively. But I'm not > sure how to construct a numpy expression that does the same think for me. > > I got to this point: > > def dim_weight(X): > weights = X[0] > volumes = X[1]*X[2]*X[3] > dweights = volumes/194.0 > return ( weights[weights>5184] , dweights[weights<=5184] ) # ??? > > I don't know how to preserve the order of the elements and return the > result in one array. Maybe I need to do create a matrix multiply matrix? > But don't know how. > > Thanks, > > Laszlo > _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion