For what it's worth, also from my astropy perspective I think hat any index
array should be a base ndarray!
-- Marten

On Fri, Aug 14, 2015 at 7:11 AM, Jaime Fernández del Río <
jaime.f...@gmail.com> wrote:

> On Thu, Aug 13, 2015 at 9:57 AM, Jaime Fernández del Río <
> jaime.f...@gmail.com> wrote:
>
>> On Thu, Aug 13, 2015 at 7:59 AM, Nathan Goldbaum <nathan12...@gmail.com>
>> wrote:
>>
>>>
>>>
>>> On Thu, Aug 13, 2015 at 9:44 AM, Charles R Harris <
>>> charlesr.har...@gmail.com> wrote:
>>>
>>>>
>>>>
>>>> On Thu, Aug 13, 2015 at 12:09 AM, Jaime Fernández del Río <
>>>> jaime.f...@gmail.com> wrote:
>>>>
>>>>> On Wed, Aug 12, 2015 at 2:03 PM, Nathan Goldbaum <
>>>>> nathan12...@gmail.com> wrote:
>>>>>
>>>>>> Hi all,
>>>>>>
>>>>>> I've been testing the package I spend most of my time on, yt, under
>>>>>> numpy 1.10b1 since the announcement went out.
>>>>>>
>>>>>> I think I've narrowed down and fixed all of the test failures that
>>>>>> cropped up except for one last issue. It seems that the behavior of
>>>>>> np.digitize with respect to ndarray subclasses has changed since the 
>>>>>> NumPy
>>>>>> 1.9 series. Consider the following test script:
>>>>>>
>>>>>> ```python
>>>>>> import numpy as np
>>>>>>
>>>>>>
>>>>>> class MyArray(np.ndarray):
>>>>>>     def __new__(cls, *args, **kwargs):
>>>>>>         return np.ndarray.__new__(cls, *args, **kwargs)
>>>>>>
>>>>>> data = np.arange(100)
>>>>>>
>>>>>> bins = np.arange(100) + 0.5
>>>>>>
>>>>>> data = data.view(MyArray)
>>>>>>
>>>>>> bins = bins.view(MyArray)
>>>>>>
>>>>>> digits = np.digitize(data, bins)
>>>>>>
>>>>>> print type(digits)
>>>>>> ```
>>>>>>
>>>>>> Under NumPy 1.9.2, this prints "<type 'numpy.ndarray'>", but under
>>>>>> the 1.10 beta, it prints "<class '__main__.MyArray'>"
>>>>>>
>>>>>> I'm curious why this change was made. Since digitize outputs index
>>>>>> arrays, it doesn't make sense to me why it should return anything but a
>>>>>> plain ndarray. I see in the release notes that digitize now uses
>>>>>> searchsorted under the hood. Is this related?
>>>>>>
>>>>>
>>>>> It is indeed searchsorted's fault, as it returns an object of the same
>>>>> type as the needle (the items to search for):
>>>>>
>>>>> >>> import numpy as np
>>>>> >>> class A(np.ndarray): pass
>>>>> >>> class B(np.ndarray): pass
>>>>> >>> np.arange(10).view(A).searchsorted(np.arange(5).view(B))
>>>>> B([0, 1, 2, 3, 4])
>>>>>
>>>>> I am all for making index-returning functions always return a base
>>>>> ndarray, and will be more than happy to send a PR fixing this if there is
>>>>> some agreement.
>>>>>
>>>>
>>>> I think that is the right thing to do.
>>>>
>>>
>>> Awesome, I'd appreciate having a PR to fix this. Arguably the return
>>> type *could* be the same type as the inputs, but given that it's a behavior
>>> change I agree that it's best to add a patch so the output of serachsorted
>>> is "sanitized" to be an ndarray before it's returned by digitize.
>>>
>>
>> It is relatively simple to do, just replace Py_TYPE(ap2) with
>> &PyArray_Type in this line:
>>
>>
>> https://github.com/numpy/numpy/blob/maintenance/1.10.x/numpy/core/src/multiarray/item_selection.c#L1725
>>
>> Then fix all the tests that are expecting searchsorted to return
>> something else than a base ndarray. We already have modified nonzero to
>> return base ndarray's in this release, see the release notes, so it will go
>> with the same theme.
>>
>> For 1.11 I think we should try to extend this "if it returns an index, it
>> will be a base ndarray" to all other functions that don't right now. Then
>> sit back and watch AstroPy come down in flames... ;-)))
>>
>> Seriously, I think this makes a lot of sense, and should be documented as
>> the way NumPy handles index arrays.
>>
>> Anyway, I will try to find time tonight to put this PR together, unless
>> someone beats me to it, which I would be totally fine with.
>>
>
> PR #6206 it is: https://github.com/numpy/numpy/pull/6206
>
> Jaime
>
> --
> (\__/)
> ( O.o)
> ( > <) Este es Conejo. Copia a Conejo en tu firma y ayúdale en sus planes
> de dominación mundial.
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion@scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
>
_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to