【问题标题】:Raise error when setting out of range values设置超出范围值时引发错误
【发布时间】:2019-04-17 15:15:17
【问题描述】:

例如,当设置uint8 矩阵元素等于-1 时,如何允许检查 numpy 中超出范围的值?当前行为只是静默接受,将元素设置为255。有没有办法在调试期间引发错误,或者只能通过子类化 numpy 数组来实现?这是一种比较常见的现象,很难观察和纠正,尤其是在有多个操作时。

一个例子:

import numpy as np
img = np.zeros((5, 5), dtype=np.uint8)
img[:] = -1
img

和输出:

array([[255, 255, 255, 255, 255],
       [255, 255, 255, 255, 255],
       [255, 255, 255, 255, 255],
       [255, 255, 255, 255, 255],
       [255, 255, 255, 255, 255]], dtype=uint8)

【问题讨论】:

    标签: python numpy types integer-overflow array-broadcasting


    【解决方案1】:

    我猜手动预检查不是一个选项,因为你想依靠 numpy 的高速?

    【讨论】:

    • 感谢您的贡献。你说的对。但是,还有其他可能导致浮点异常的操作,正在考虑中,它们的错误级别由numpy.seterr 方法处理。
    • 您是否尝试使用 NaN 而不是 -1?但这实际上只是解决这个特定问题的方法
    • 在屏蔽期间避免非法值的唯一方法是使用numpa.ma 模块,但这是一种矫枉过正的做法,它会降低性能并且不能全局使用。这就是为什么我找不到缺少此类调试标志的原因。
    • 真正避免这种情况的一种方法是使用 cython,因为它强制执行严格的类型。但这也可能是矫枉过正
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 2016-04-17
    相关资源
    最近更新 更多