Python numpy uint64被转换为浮点数

2024-03-29 10:18:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做一个简单的整数除法,例如1/3=0,但是uint64的行为非常奇怪,导致我的结果被强制转换为float。为什么?在

python> uint64(100)/3
Out[0]: 33.333333333333336
python> uint64(100)/uint64(3)
Out[1]: 33
python> int64(100)/3
Out[2]: 33
python> int64(100)/uint64(3)
Out[3]: 33.333333333333336
python> int32(100)/int64(3)
Out[4]: 33

Tags: 整数floatoutint32int64uint64
1条回答
网友
1楼 · 发布于 2024-03-29 10:18:26

这是因为Python会看到有符号和无符号的类型,并尝试自动推断结果类型,而结果类型将是有符号的。但是,由于第一个64位数字是无符号的,签名版本需要65位。由于Python/Numpy中没有大于64位的整数类型,Python选择float64。标准类型即除数3int64,这就是为什么第一个示例将被转换为float64。 当然,这也适用于多种应用程序:

python> import numpy as np
python> type( np.int64( 10 ) * np.int64( 1 ) )
Out[0]: numpy.int64
python> type( np.uint64( 10 ) * np.uint64( 1 ) )
Out[1]: numpy.uint64
python> type( np.uint64( 10 ) * np.int64( 1 ) )
Out[2]: numpy.float64

注意,这种自动类型推断只适用于不同的有符号类型,因为它是不可知值的,否则几乎所有类型都必须以float64结尾,因为例如,在连续三次乘法之后,它可能不再适合uint64。在

^{pr2}$

注意:在Python3中,简单的斜杠在默认情况下是整数除法。相反,在Python3中,您必须使用3 // 21作为3 / 2 == 1.5。在

相关问题 更多 >