On 15/01/07, David Cournapeau <[EMAIL PROTECTED]> wrote: > Hi, > > I am trying to add support for out argument to one C function using > numpy API (still the clip function). I was wondering about the expected > behaviour when out does not have the "expected" type. > For example, using again the clip function (but the question is not > specific to this function) > > In [1]: import numpy > > In [2]: a = numpy.linspace(0, 10, 101) > > In [3]: b = numpy.zeros(a.shape, dtype = numpy.int32) > > In [4]: print a.dtype > float64 > > In [5]: a.clip(0.1, 0.5, b) > > Should this be equivalent to b = a.clip(0.1, 0.5); b = > b.astype(numpy.int32) (ie, the casting is done at the end, similar to an > ufunc) ?
Since the point of output arguments is to avoid allocating new storage, I'm not sure whether to say yes or no here... but if you're given an output array to store the answer in, you're more or less forced to convert it to that type (and layout, and whatnot) for storage - imagine, for example, it is every third element of a bigger array (and remember you do not have access to the name "b"). for example: a = numpy.arange(10) b = numpy.zeros(40).astype(numpy.uint8) a.clip(0.1,5.2,b[::4]) You can't do anything about the data type of b, so you don't really have any choice but to convert to uint8; one hopes that this will not require the allocation of an extra array of floats. A. M. Archibald _______________________________________________ Numpy-discussion mailing list Numpy-discussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpy-discussion