繁体   English   中英

可以猴子补丁 numpy 数组切片行为吗?

[英]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.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM