运用numpy进行运算出现如下的情况:
import numpy as np
dataset=np.array([1],dtype=np.int64)
data_int=dataset[0]
type(data_int)
Out[5]: numpy.int64
type(data_int+1)
Out[6]: numpy.int64
dataset=np.array([1],dtype=np.uint64)
data_uint=dataset[0]
type(data_uint)
Out[9]: numpy.uint64
type(data_uint+1)
Out[10]: numpy.float64
发现np.int64与np.uint64相加,数据类型变为了np.float64,这在后续程序运行中会出现bug。
原因分析:
根据个人理解,np.int64与np.uint64相加,结果类型需要一个有符号数,同时np.int64的范围难以包括np.uint64这个加数,理论上的数据类型为np.int128,但numpy库中并没有这一数据类型,因此程序会将其自动变换为np.float64,即便变成了两个整形相加,数据类型变为float的情况。
测试结果如下:
type(np.uint8(1)+np.int8(1))
Out[3]: numpy.int16
type(np.uint16(1)+np.int16(1))
Out[4]: numpy.int32
type(np.uint32(1)+np.int32(1))
Out[5]: numpy.int64
type(np.uint64(1)+np.int64(1))
Out[6]: numpy.float64
解决方案:
统一数据类型,根据需要统一为np.int64或者np.uint64,避免计算错误。