python参数类型为uint8_python – 在向uint8添加int时奇怪的类型转换?

这种行为似乎源于将数组转换保持在绝对最小值的可理解的愿望.

考虑

z = np.uint8(255)

z + 1

# 256

type(z+1)

# numpy.int64

文字1的类型为int.在这种情况下,似乎两个操作数都被强制转换为np.int64.但这与结果无关!

zz = np.uint8(1)

type(zz + 1)

# numpy.int64

然而,如果我们使用数组而不是简单的整数,则转换是不同的.

x = np.array([255], dtype=np.uint8)

x + 1

# array([0], dtype=uint8)

在我看来这可能就是这种情况,因为将整个数组从一种类型转换为另一种类型需要大量的计算工作,所以只有在它确定100%确定在查看所有数组元素之前这是必要的时候才会这样做,即仅当另一个操作数本身不适合当前类型时.事实上,即使我们采取

b = np.int16(1)

x+b

# array([0], dtype=uint8)

所以它实际上将右手操作数转换为较小的类型,所有这些都是为了保存数组的类型.另一方面,当添加两个np.array时,类型转换总是进行更大的类型.

长话短说: – 简单的整数加法总是强制转换为更大类型的操作数 – 如果这足以表示整数,则添加numpy数组和整数强制转换为数组的类型,否则为整数的类型 – 添加两个numpy数组转换为更大类型的操作数(与两个整数一样)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值