numpy 中数据类型的奇怪隐式转换

2023-12-26

我创建了一个简单的 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(使用前将#替换为@)

numpy 中数据类型的奇怪隐式转换 的相关文章

随机推荐