我在笔记本电脑上安装了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
Run Code Online (Sandbox Code Playgroud)
这些命令的输出显示以下内容:
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')
Run Code Online (Sandbox Code Playgroud)
我的问题是,即使我的系统是64位,为什么默认情况下数组类型是int32而不是int64?
任何帮助表示赞赏.
它似乎不是处理器的"位数"(32对64),特别是对这篇文章的评论:
好答案.正如我在上面的评论中提到的,我能够在使用64位ARM处理器的Raspberry Pi 3上复制@ suzep136的问题.知道为什么在64位架构上会出现溢出问题吗?我唯一能想到的是lapack/blas是为32位内核编译的; 我想我通过apt-get安装了numpy. - nrlakin
它也不是C中int的大小,例如在我的机器上:
>>> import numpy, ctypes
>>>
>>> ctypes.sizeof(ctypes.c_int)
4
>>> numpy.array([1]).dtype
dtype('int64')
Run Code Online (Sandbox Code Playgroud)
那么,它取决于什么?
编辑:还有另一位候选人,谢谢你们:
LAPACK在所有架构上使用32位整数 - ev-br
编辑:部分答案在这里.谢谢Goyo.我已经复制了它并使其成为CW,因此您可以添加更精细的点,例如PyPy或Jython中发生的事情.我也对这个选择是否有更深层次的原因感兴趣.
我正在研究一些线性代数的东西,并且根本不明白为什么numpy给出以下内容:
我从mathematica得到的结果是
编辑:如果您需要矩阵:
test = [[19722145, -21016468, 51417377],
[-185674670, 298847128, -428429486],
[289326728, -516012704, 691212936]]
A = [[9, 4, 1], [2, 0, 8], [-8, 8, -8]]
Run Code Online (Sandbox Code Playgroud)