如何减去两个无符号的numpy数组以给出一个带符号的结果?

时间:2016-01-21 18:17:06

标签: python arrays numpy

我想减去两个无符号的numpy数组并得到一个带符号的结果。我事先并不知道这些类型。将两者都转换为int64可以正常工作,但如果输入为uint8,则会不必要地浪费空间(转换为int16就足够了)。

我曾想过编写一个函数来返回下一个更大的有符号类型(例如uint8-> int16),最大值为最大签名类型。但是,如果不对数据类型表进行硬编码,我不知道如何做到这一点,这可能会过时。

我认为numpy.results_type或numpy.promote_type可能有所帮助,但我无法弄清楚如何将它们用于此目的。

有没有人有干净的解决方案?

1 个答案:

答案 0 :(得分:2)

您可以使用newtype = np.promote_types(x.dtype, np.byte),其中x是未知dtype的无符号数组。由于np.byte是可能的最小有符号整数类型,newtype将是x可以安全转换的最小有符号整数类型。

稍微更清晰的解决方案是将np.byte作为np.result_type的参数之一传递:

newtype = np.result_type(x, y, np.byte)

这也会处理xy具有可能不同的dtypes的情况。