我已经在笔记本电脑上安装了Anaconda 3 64位,并在Spyder中编写了以下代码:
import numpy.distutils.system_info as sysinfo
import numpy as np
import platform
sysinfo.platform_bits
platform.architecture()
my_array = np.array([0,1,2,3])
my_array.dtype
这些命令的输出如下所示:
sysinfo.platform_bits
Out[31]: 64
platform.architecture()
Out[32]: ('64bit', 'WindowsPE')
my_array = np.array([0,1,2,3])
my_array.dtype
Out[33]: dtype('int32')
我的问题是,即使我的系统是64位的,为什么默认情况下数组类型是int32而不是int64?
任何帮助都很感激。
5条答案
按热度按时间ddarikpa1#
默认整数类型
np.int_
为C long:http://docs.scipy.org/doc/numpy-1.10.1/user/basics.types.html
但C长整型在win64中是int32。
https://msdn.microsoft.com/en-us/library/9c3yd98k.aspx
这是win64平台的一个奇怪之处。
kt06eoxx2#
在Microsoft C中,即使在64位系统上,
long int
数据类型的大小也是32位。(例如,请参见https://msdn.microsoft.com/en-us/library/9c3yd98k.aspx。)Numpy从C编译器的long int
继承整数的默认大小。mtb9vblg3#
原发帖人Prana问了一个很好的问题,“为什么整数默认设置为32位,在64位机器上?”
据我所知,简短的回答是:“因为它的设计是错误的”。看起来很明显,64位机器应该默认定义一个整数在任何相关的解释器为64位。但当然,这两个答案解释了为什么不是这样。事情现在不同了,所以我提供这个更新。
我注意到,对于CentOS-7.4 Linux和MacOS 10.10.5(新的和旧的),运行Python 2.7.14(Numpy 1.14.0),(截至2018年1月),默认整数现在被定义为64位。(初始示例中的“my_array.dtype”现在在两个平台上都报告“dtype('int 64')”。
在任何解释器中使用32位整数作为默认整数,如果你在做整数运算,会得到非常奇怪的结果,正如这个问题所指出的:
Using numpy to square value gives negative number
现在看来,Python和Numpy已经被更新和修订(有人可能会说,已经更正),因此,为了重现上面问题中所描述的问题,必须显式地将Numpy数组定义为int 32。
在Python中,现在在两个平台上,默认的整数都是int 64。下面的代码在两个平台(CentOS-7.4和MacOSX 10.10.5)上运行相同:
dtype('int64')
[ 1 4 2289813904]
但如果我们将t_array设为32位整数,则会得到以下结果,因为整数计算会滚动32位字中的符号位。
dtype*('int32')
[ 1 4 -2005153392]
使用int 32的原因当然是为了提高效率,在某些情况下(例如使用TensorFlow或其他神经网络机器学习工具),您需要使用32位表示(当然大多数是浮点型),因为与使用64位浮点型相比,速度的提升可能非常显著。
uyhoqukh4#
您可以创建数据类型设置为int64的数组。例如,
lyr7nygr5#
您可以显式地将数组转换为所需的数据类型,如下所示: