2016-01-20 26 views
7

當使用np.delete時,使用超出邊界索引時會引發indexError。當越界索引位於np.array中並且該數組用作np.delete中的參數時,爲什麼不會引發indexError?爲什麼python numpy.delete在跨越邊界索引位於np數組時不會引發indexError

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

這給出了一個指數誤差,因爲它應該(索引圖9是出界)

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

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

給予:

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

回答

6

這是一個已知的「功能」,將在以後的版本中棄用。

From the source of numpy

# 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] 

在python啓用DeprecationWarning實際顯示此警告。 Ref

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])