在Python中计算numpy无符号整数之间差异的更好方法

blu*_*ues 5 python numpy uint

numpy.uint8我正在计算python 中 两个 s 之间的绝对差,如果大于 ,d = abs(a - b)这会导致溢出错误。避免这种情况的最佳方法是什么?ba

sen*_*rle 3

正如您的评论所示,它们不是int;他们numpy.uint8是。只需将它们转换为ints:

>>> a, b = map(numpy.uint8, (50, 60))
>>> a - b
__main__:1: RuntimeWarning: overflow encountered in ubyte_scalars
246
>>> a, b = map(int, (a, b))
>>> a - b
-10
Run Code Online (Sandbox Code Playgroud)

由于您关心速度,这里有一些测试(借用Sven的表格,谢谢):

>>> %timeit abs(int(a) - int(b))
1000000 loops, best of 3: 410 ns per loop
>>> %timeit a - b if a > b else b - a
1000000 loops, best of 3: 470 ns per loop
Run Code Online (Sandbox Code Playgroud)

所以,是的,它更快,但除非我们谈论的是执行数亿次,否则它一点也不重要。