Python 将np.int8数组与127相乘会产生不同的numpy数组类型,具体取决于平台
以下代码:Python 将np.int8数组与127相乘会产生不同的numpy数组类型,具体取决于平台,python,arrays,numpy,Python,Arrays,Numpy,以下代码: >>> import numpy as np >>> np.arange(2).astype(np.int8) * 127 为numpy 1.13.3生产 # On Windows array([0, 127], dtype=int16) # On Linux array([0, 127], dtype=int8) 但是,如果我将127更改为126,两者都返回np.int8数组。如果我将127更改为128都返回np.int16数组 问题: 这
>>> import numpy as np
>>> np.arange(2).astype(np.int8) * 127
为numpy 1.13.3生产
# On Windows
array([0, 127], dtype=int16)
# On Linux
array([0, 127], dtype=int8)
但是,如果我将127
更改为126
,两者都返回np.int8
数组。如果我将127
更改为128
都返回np.int16
数组
问题:
- 这是预期的行为吗
- 为什么这一案例中的两个平台不同
- 这是由于。A导致
np.can\u cast(127,np.int8)
为False,因此NumPy对127使用了太大的数据类型。操作系统依赖性是因为在Linux和Windows上,C long的大小不同,而一些NumPy代码路径依赖于C long的大小
一份报告已于2004年发布。更新到至少NumPy 1.14.0后,您应该会在所有平台上看到
int8
的数据类型。这听起来像个bug。它在Windows上应该是np.int8。不知何故,numpy.can_cast(127,numpy.int8,casting='safe')
在Windows上返回False
。