Bug in numpy.where #369

Closed
philhodge opened this Issue Jul 30, 2012 · 2 comments

Comments

Projects
None yet
3 participants

On a Linux machine:

uname -srvop
Linux 2.6.18-308.8.2.el5 #1 SMP Tue May 29 11:54:17 EDT 2012 x86_64
GNU/Linux

this example shows a problem with the where function:

Python 2.7.1 (r271:86832, Dec 21 2010, 11:19:43)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
import numpy as np
print np.version
1.5.1
net = np.zeros(3, dtype='>f4')
net[1] = 0.00458849
net[2] = 0.605202
max_net = net.max()
test = np.where(net <= 0., max_net, net)
print test
[ -2.23910537e-35 4.58848989e-03 6.05202019e-01]

When I specified the dtype for net as '>f8', test[0] was 3.46244974e+68. It worked as expected (i.e. test[0] should be 0.605202) when I specified float(max_net) as the second argument to np.where.

Member

seberg commented Aug 3, 2012

Hey, thought about looking a bit at numpy code... and while I don't quite understand it, I think I found the bug. Maybe instead of PyArray_EquivTypes adding check for ->byteorder or such makes more sense.

Here is a Diff fixing the issue for me:

--- a/numpy/core/src/multiarray/scalarapi.c
+++ b/numpy/core/src/multiarray/scalarapi.c
@@ -334,7 +334,7 @@ finish:
     if (outcode == NULL) {
         return (PyObject *)r;
     }
-    if (outcode->type_num == typecode->type_num) {
+    if (PyArray_EquivTypes(outcode, typecode)) {
         if (!PyTypeNum_ISEXTENDED(typecode->type_num)
                 || (outcode->elsize == typecode->elsize)) {
             Py_DECREF(outcode);
Contributor

certik commented Aug 30, 2012

@seberg, thank you for your patch. Would you mind reviewing my PR (395) above? I also wrote tests.

certik closed this in ecbd938 Aug 31, 2012

@certik certik added a commit to certik/numpy that referenced this issue Sep 12, 2012

@certik certik FIX: bug in np.where and recarray swapping
Fixes #369 and the Ticket 2185

Thanks to @seberg for providing the patch.
996a9fb

@teoliphant teoliphant added a commit to teoliphant/numpy that referenced this issue Sep 13, 2012

@certik @teoliphant certik + teoliphant FIX: bug in np.where and recarray swapping
Fixes #369 and the Ticket 2185

Thanks to @seberg for providing the patch.
15fd7f4
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment