Why python numpy.delete does not raise indexError when out-of-bounds index is in np array
Question: When using np.delete an indexError is raise when an out-of-bounds index is
used. When an out-of-bounds index is in a np.array used and the array is used
as the argument in np.delete, why doesnt this then raise an indexError?

    
    
    np.delete(np.array([0, 2, 4, 5, 6, 7, 8, 9]), 9)
    

this gives an index-error, as it should (index 9 is out of bounds)

while

    
    
    np.delete(np.arange(0,5), np.array([9]))
    

and

    
    
    np.delete(np.arange(0,5), (9,))
    

give:

    
    
    array([0, 1, 2, 3, 4])
    


Answer: This is a known "feature" and will be deprecated in later versions.

[From the source of
numpy](https://github.com/numpy/numpy/blob/v1.10.1/numpy/lib/function_base.py#L3867):

    
    
    # Test if there are out of bound indices, this is deprecated
    inside_bounds = (obj < N) & (obj >= -N)
    if not inside_bounds.all():
        # 2013-09-24, 1.9
        warnings.warn(
            "in the future out of bounds indices will raise an error "
            "instead of being ignored by `numpy.delete`.",
            DeprecationWarning)
        obj = obj[inside_bounds]
    

Enabling DeprecationWarning in python actually shows this warning.
[Ref](http://stackoverflow.com/questions/20960110/how-do-i-get-warnings-warn-
to-issue-a-warning-and-not-ignore-the-line)

    
    
    In [1]: import warnings
    
    In [2]: warnings.simplefilter('always', DeprecationWarning)
    
    In [3]: warnings.warn('test', DeprecationWarning)
    C:\Users\u31492\AppData\Local\Continuum\Anaconda\Scripts\ipython-script.py:1: De
    precationWarning: test
      if __name__ == '__main__':
    
    In [4]: import numpy as np
    
    In [5]: np.delete(np.arange(0,5), np.array([9]))
    C:\Users\u31492\AppData\Local\Continuum\Anaconda\lib\site-packages\numpy\lib\fun
    ction_base.py:3869: DeprecationWarning: in the future out of bounds indices will
     raise an error instead of being ignored by `numpy.delete`.
      DeprecationWarning)
    Out[5]: array([0, 1, 2, 3, 4])
    

