[Numpy-discussion] Passing multiple output arguments to ufunc

Jaime Fernández del Río jaime.frio at gmail.com
Thu Oct 16 23:43:12 EDT 2014


There is an oldish feature request in github
(https://github.com/numpy/numpy/issues/4752), complaining about it not
being possible to pass multiple output arguments to a ufunc using
keyword arguments.

You can pass them all as positional arguments:

>>> out1 = np.empty(1)
>>> out2 = np.empty(1)
>>> np.modf([1.333], out1, out2)
(array([ 0.333]), array([ 1.]))

You can also pass the first as a kwarg if you leave the others unspecified:

>>> np.modf([1.333], out=out1)
(array([ 0.333]), array([ 1.]))

You can also use None in a positional argument to leave some of the
output arguments unspecified:

>>> np.modf([1.3333], None, out2)
(array([ 0.3333]), array([ 1.]))

But you cannot do something like

>>> np.modf([1.333], out=(out1, out2))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: return arrays must be of ArrayType

Would this behavior make sense? The idea would be to allow a tuple as
a valid input for the 'out=' kwarg. It would have to have a length
exactly matching the number of output arguments, and its items would
have to be either arrays or None.

For backwards compatibility we probably should still allow a single
array to mean the first output argument, even if the ufunc has
multiple outputs.

Any other thoughts?

Jaime

-- 
(\__/)
( O.o)
( > <) Este es Conejo. Copia a Conejo en tu firma y ayúdale en sus
planes de dominación mundial.



More information about the NumPy-Discussion mailing list