为何在64位系统的32位Anaconda(Python2.7)中numpy.intc默认是32位?
为什么64位系统上32位Anaconda(Python2.7)的numpy intc默认是32位?
这个问题的核心在于numpy的类型定义依赖于当前Python环境的编译架构,而非操作系统的位数,具体原因可以拆解为这几点:
intc的本质是对应C语言的int类型
numpy里的intc是专门用来匹配C语言标准中int类型的numpy数据类型。而C语言中int的大小是由编译时的目标架构决定的——当你安装的是32位版本的Anaconda(Python2.7),整个Python环境包括numpy都是以32位目标编译的,此时C语言的int就是32位,所以np.intc自然对应int32,就像你测试的那样:np.intc(1).dtype # dtype('int32') type(np.intc(1)) # <type 'numpy.int32'>系统位数检测工具反映的是OS架构,不是Python进程架构
你用platform.architecture()或者numpy.distutils.system_info.platform_bits得到64位的结果,是因为这些工具检测的是操作系统本身的位数。64位Windows系统支持32位程序通过WOW64(Windows-on-Windows 64-bit)兼容层运行,但这并不会改变32位Python进程自身的编译架构——它依然是32位程序,所有依赖编译架构的类型定义都遵循32位标准。额外验证方法:查看Python自身的架构标识
你可以通过sys.maxsize来确认当前Python的架构:import sys print(sys.maxsize) # 32位Python会输出2147483647,64位则是9223372036854775807如果输出的是32位的最大值,就说明你的Python确实是32位环境,numpy的类型自然会跟着走。
内容的提问来源于stack exchange,提问作者noumenal
相关产品推荐
相关产品推荐

