繁体   English   中英

可能monkeypatch numpy数组切片行为?

Possible to monkeypatch numpy array slice behavior?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我知道Monkeypatching不受欢迎(有充分的理由),但这只是脚本中没有其他人需要处理的。 而且我想更好地了解Python :)

如果切片的边界超过要切片的事物的长度,Python不会引发错误。 例如:

>>> 'abc'[10:20]
''

哪一个都很好,但是如果您想引发错误怎么办? 具体来说,当使用Numpy数组时。 我想要一些类似的东西

# 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正在使用父类的属性,但是(据我所知)它没有一个作为“ builtin_function_or_method”

所以我有两个问题。 我可以做傻傻的猴子补丁吗? 当没有__getitem__属性时,为什么要在Numpy数组上调用__getitem__呢?

问题暂未有回复.您可以查看右边的相关问题.
3 切片numpy数组

给定一个切片的numpy数组,如下所示: 我可以从b重新创建a的最简单方法是什么? 就像是: ...

4 Numpy数组切片

我有一个numpy数组,以及一些偏移/长度值。 我想从这个数组中提取所有属于offset,offset + length的条目,这些条目然后用于从原始数组构建一个新的'reduced'数组,只包含偏移/长度对选择的那些值。 对于单个偏移/长度对,这对于标准阵列切片[offset:offs ...

6 切片 numpy 数组

在如下数据序列中,我需要删除每个序列的最后一个元素以创建一个新数组: 预期输出: 无论如何,我需要的是删除最后一列,但我不能。 使用下面的语法,我删除了最后一行。 我应该如何切片数组以满足我的需求? ...

7 切片 numpy 数组

我得到一个有 2 列和 12 行的数组,我想取第一列,其中将包含所有 12 行并将它们转换为列。 什么是合适的切片方法以及如何将结果转换为列? 准确地说,看屏幕(第二个)应该取所有 0 列列并以正常方式从左到右转换它们 结果应该是这样的(第一屏) ...

8 Python和数字/ numpy数组切片行为

在Python2.4上,单个冒号切片运算符:可在Numeric矩阵上按预期工作,因为它返回其使用的维的所有值。 例如,二维矩阵的所有X和/或Y值。 在Python2.6上,单个冒号切片运算符在某些情况下似乎会产生不同的影响:例如,在规则的2-D MxN矩阵上, m[:]可能导致zeros ...

9 切片numpy数组与其他数组

我试图提取由x包含的一组索引指定的一个numpy数组y的子集,同时仍然留下y一些索引。 举个具体的例子。 设y具有形状(10,10,10,3)而x具有形状(7,7,3) 。 x的最后一个维度对应于y的前三个维度的索引信息。 也就是说,我想要一个有效的切片操作,结果如下: 理想情况 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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