更好地计算Python中numpy unsigned int之间差异的方法

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

解决方法:

正如你的评论所指出的,它们不是整体;他们是numpy.uint8s.只需将它们转换为整数:

>>> 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

既然你关心速度,这里有几个测试(借用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

所以是的,它更快,但除非我们谈论数亿次这样做,否则无所谓.

上一篇:【题解】[51Nod 1847] 奇怪的数学题【min_25筛 杜教筛 莫比乌斯反演】


下一篇:[游戏开发设计]浅谈游戏开发数据系统设计(一)