为什么越界索引在np数组中时python numpy.delete不会引发indexError [英] Why python numpy.delete does not raise indexError when out-of-bounds index is in np array
本文介绍了为什么越界索引在np数组中时python numpy.delete不会引发indexError的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
使用np.delete时,如果使用越界索引,则会引发indexError.如果在使用的np.array中有越界索引,并且该数组用作np.delete中的参数,那么为什么不引发indexError?
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)
这应该产生索引错误(索引9超出范围)
this gives an index-error, as it should (index 9 is out of bounds)
同时
np.delete(np.arange(0,5), np.array([9]))
和
np.delete(np.arange(0,5), (9,))
给予:
array([0, 1, 2, 3, 4])
推荐答案
这是已知的功能",在以后的版本中将不推荐使用.
This is a known "feature" and will be deprecated in later versions.
# 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
Enabling DeprecationWarning in python actually shows this warning. 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])
这篇关于为什么越界索引在np数组中时python numpy.delete不会引发indexError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文