当使用 np.delete 时,当使用越界索引时会引发 indexError。当越界索引在 np.array 中使用并且该数组用作 np.delete 中的参数时,为什么这不会引发 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])
最佳答案
这是一个已知的“功能”,将在以后的版本中弃用。
# 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])
关于python - 当越界索引在 np 数组中时,为什么 python numpy.delete 不会引发 indexError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34898720/