是否可以禁用Numpy Number类型的换行 - python

我想例如uint类型打0而不是减法环绕-是否有可能在不编写新c类型的情况下从python更改此行为? (例如,减去两个uint8 numpy数组)?

python大神给出的解决方案

Numpy中没有整数上溢/下溢检测,但是您可以在计算之前或之后对此进行测试。 m0在计算后执行此操作,如下所示。

import numpy as np
import timeit

a = np.arange(0, 251, 50, dtype=np.uint8)
b = np.array(a[::-1])

def m0(a, b):
    x = (a-b)
    x[b>a] = 0

def m1(a, b):
    c = (a.astype(np.int16) - b).clip(0, 255).astype(np.uint8)

m0(a, b)
m1(a, b)

a = np.array(a.repeat(1000))  # repeat and copy (copy since I don't remember whether repeat is an indexing trick)
b = np.array(b.repeat(1000))

N = 1000000
print timeit.timeit("m0(a, b)", setup="from __main__ import m0, m1, a, b", number=N)
# 1.7734951973
print timeit.timeit("m1(a, b)", setup="from __main__ import m0, m1, a, b", number=N)
# 3.6973798275

我还将时间与@Qlaus的方法进行了比较,这也很好,并且它们是可比的(您不应在这里非常认真地考虑50%的速度提高,而应针对您的特定应用程序对它们进行测试)。另一方面,减法本身大约需要上述时间的0.6,因此除去此时间,m0解决方案的速度大约快3倍。但是另一方面,通常,如果您执行一个会下溢或上溢的操作,则您将执行多个操作,在这种情况下,使用int16可能最快。最后,针对您的实际情况进行测试将是优化的最佳方法。