[Numpy-discussion] Error in choose (bug?)
jmiller at stsci.edu
Mon May 17 12:04:02 CDT 2004
On Thu, 2004-05-13 at 12:57, Todd Miller wrote:
> On Thu, 2004-05-13 at 07:13, Álvaro Tejero Cantero wrote:
> > I have a matrix of particle collision times: times[i,j] gives the time
> > for particle "i" to collide with particle "j".
> > If I do, in order to get the first expected collision time for each
> > particle, the following (random array for testing purposes) :
> > >>> N=30
> > >>> times = rnd.random([N,N])
> > >>> choose(argmin(times,transpose(times))
> > Segmentation fault (of the python interactive shell!!!)
> > With N=100 I get a more informative traceback, and rest within the
> > shell:
> > Traceback (most recent call last):
> > File "<stdin>", line 1, in ?
> > File "/usr/lib/python2.3/site-packages/numarray/ufunc.py", line 1670, in choose
> > return _choose(selector, population, outarr, clipmode)
> > File "/usr/lib/python2.3/site-packages/numarray/ufunc.py", line 1579, in __call__
> > result = self._doit(computation_mode, woutarr, cfunc, ufargs, 0)
> > File "/usr/lib/python2.3/site-packages/numarray/ufunc.py", line 1564, in _doit
> > blockingparameters)
> > ValueError: _operator_compute: too many inputs + outputs
> > For N=10,N=15 I get the expected output, but for N=20 I get again the
> > brutal segfault...
> > regards,
> > á.
I tracked this down today and understand the problem: there's a bug in
the ufunc error checking and a ridiculous limit in choose. I'm still
working out the "real" solution but a quick workaround is to edit
numarray.h and set MAXARGS to a larger number, say N+10.
Todd Miller <jmiller at stsci.edu>
More information about the Numpy-discussion