我创建了一个简单的 numpy 数据类型 uint ,如下所示:
import numpy as np
a = np.array([1,2,3], dtype=np.uint)
当我计算时
a[0] + 1
我期望结果为 2,但它给出了
2.0
为什么 np.uint 需要隐式转换为 float?请注意,int 或 np.int64 不会发生这种情况
我能够找到这个密切相关的numpy 存储库上的 github 问题 https://github.com/numpy/numpy/issues/7126. 根据罗伯特·科恩的说法 https://github.com/numpy/numpy/issues/7126#issuecomment-175571231, 的主要贡献者numpy
and scipy
,关于结果类型的决定是根据输入类型做出的。numpy
依赖于具有特定于类型的实现的底层例程,其中两个参数属于同一类型,因此它必须提升为some普通型。在这种情况下,问题在于一种类型是无符号的,另一种类型是有符号的:
……这是多种因素共同作用的结果。实施numpy.add()
这些例程的基础 ufunc 仅具有特定于类型的
两个参数具有相同类型的实现。所以
ufunc 系统需要将参数转换为通用类型。中的一个
参数是有符号的,因此两个参数都需要转换为有符号的
类型。可以表示值的最小有符号类型
的最大范围uint64
is float64
(注意!并非所有uint64
价值观
可以表示为float64
漂浮!精度丢失!但它是
比int64
整个上半部分的值都丢失了。)。
请注意,无符号和有符号 numpy 类型也会发生类似的情况,np.uint
and np.int
:
>>> import numpy as np
>>> np.uint(0) + np.int64(1)
1.0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)