int数据类型相加,结果为float情况

运用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,避免计算错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值