2016-01-20 66 views
7

np.deleteを使用すると、範囲外のインデックスが使用されたときにindexErrorが発生します。範囲外のインデックスが使用されているnp.arrayにあり、配列がnp.deleteの引数として使用されている場合、なぜこれでindexErrorが発生しますか?範囲外のインデックスがnpの配列の場合、numpy.deleteのpythonがインデックスを生成しない理由

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

:PythonでDeprecationWarningを有効にする

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

は、実際にこの警告が表示されます。 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]) 
関連する問題