[Numpy-discussion] np.nonzero behavior with multidimensional arrays
Jaime Fernández del Río
jaime.frio at gmail.com
Mon Feb 23 02:52:56 EST 2015
This was raised in SO today:
http://stackoverflow.com/questions/28663142/why-is-np-wheres-result-read-only-for-multi-dimensional-arrays/28664009
np.nonzero (and np.where for boolean arrays) behave differently for 1-D and
higher dimensional arrays:
In the first case, a tuple with a single behaved base ndarray is returned:
>>> a = np.ma.array(range(6))
>>> np.where(a > 3)
(array([4, 5]),)
>>> np.where(a > 3)[0].flags
C_CONTIGUOUS : True
F_CONTIGUOUS : True
OWNDATA : True
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False
In the second, a tuple with as many arrays as dimensions in the passed
array is returned, but the arrays are not base ndarrays, but of the same
subtype as was passed to the function. These arrays are also set as
non-writeable:
>>> np.where(a.reshape(2, 3) > 3)
(masked_array(data = [1 1],
mask = False,
fill_value = 999999)
, masked_array(data = [1 2],
mask = False,
fill_value = 999999)
)
>>> np.where(a.reshape(2, 3) > 3)[0].flags
C_CONTIGUOUS : False
F_CONTIGUOUS : False
OWNDATA : False
WRITEABLE : False
ALIGNED : True
UPDATEIFCOPY : False
I can't think of any reason that justifies this difference, and believe
they should be made to return similar results. My feeling is that the
proper behavior is the 1-D one, and that the behavior for multidimensional
arrays should match it. Anyone can think of any reason that justifies the
current behavior?
Jaime
--
(\__/)
( O.o)
( > <) Este es Conejo. Copia a Conejo en tu firma y ayúdale en sus planes
de dominación mundial.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20150222/5140e1a8/attachment.html>
More information about the NumPy-Discussion
mailing list