Python 如何将两个uint16 numpy数组相减以高效地生成一个int16 numpy数组
我有两个必须减去的'type=np.uint16'numpy数组(我们称它们为A和B)。 我必须考虑执行A-B可能导致一些负面条目的可能性。为了避免溢出,我希望能够执行Python 如何将两个uint16 numpy数组相减以高效地生成一个int16 numpy数组,python,arrays,numpy,Python,Arrays,Numpy,我有两个必须减去的'type=np.uint16'numpy数组(我们称它们为A和B)。 我必须考虑执行A-B可能导致一些负面条目的可能性。为了避免溢出,我希望能够执行 diff = A - B 这样,diff将转换为np.int16 numpy数组。 如何在Python中高效地执行此操作 如果我这样做: diff = np.zeros(height*width, dtype=np.int16) 然后表演 diff = A - B 我还是觉得满溢。我特意将B的某些值设置为大于A中的值,以便
diff = A - B
这样,diff将转换为np.int16 numpy数组。
如何在Python中高效地执行此操作
如果我这样做:
diff = np.zeros(height*width, dtype=np.int16)
然后表演
diff = A - B
我还是觉得满溢。我特意将B的某些值设置为大于A中的值,以便发生of。so
np。uint16
不能包含负值。。你想要什么?@farhawa这是正确的,因为我确信A和B不包含负值。但B中的某些值可能大于A中的相应值,因此这样做会导致某些值溢出。我不希望也能保留负值,而且基本上不会溢出。一个(也是唯一一个)解决方案是使用另一个dtype
@farhawa。。我懂了!当我计算A和B时,使用np.int32会比使用np.uint16慢吗?或者您认为使用浮点会更好吗?在现代CPU和前端总线上,int32不应该比int16快或慢,但您可以进行基准测试。float32将无法捕获所有整数>=2**24
(即int(np.float32(2**24+1))-(2**24+1)
),因此您可能不希望这样。但int32将占用2倍的内存。测试所有三种可能性并对它们进行基准测试应该很容易。