[英]Possible to monkeypatch numpy array slice behavior?
我知道猴子补丁是不受欢迎的(有充分的理由),但这只会出现在脚本中,其他任何人都不需要处理。 我想更好地理解 Python :)
如果切片的边界超过被切片事物的长度,Python 不会抛出错误。 例如:
>>> 'abc'[10:20]
''
这一切都很好,但是如果您想抛出错误怎么办? 具体来说,使用 Numpy arrays 时。 我想要类似的东西
# This will not work!
import numpy as np
old_getitem = np.array.__getitem__
def new_getitem(self, val):
if isinstance(val, slice):
if val.stop >= len(self):
raise IndexError
return old_getitem(self, val)
np.array__getitem__ = new_getitem
但这不起作用,因为 np.array 没有__getitem__
属性
>>> np.array.__getitem__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'builtin_function_or_method' object has no attribute '__getitem__'
我觉得奇怪的是以下工作:
>>> a = np.array([1, 2, 3])
>>> a.__getitem__(slice(0,2))
array([1, 2])
我的第一个猜测是 Numpy 正在使用父 class 的属性,但是(据我所知)它没有“builtin_function_or_method”
所以我有两个问题。 可以做我愚蠢的猴子补丁吗? 为什么在 Numpy 数组上调用__getitem__
时它没有__getitem__
属性?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.