【发布时间】:2013-06-03 14:17:48
【问题描述】:
[编辑]
好吧,我的测试用例考虑不周。我只测试了一维数组。在这种情况下,我会返回一个 64 位标量。如果我在 3D 数组上执行此操作,我会按预期得到 32 位。
我正在尝试计算一个非常大的 numpy 数组 (600*600*4044) 的均值和标准差,并且我已接近内存的限制(64 位机器上为 16GB)。因此,我试图将所有内容处理为 float32 而不是默认的 float64。但是,每当我尝试处理数据时,即使我将 dtype 指定为 float32,我也会返回 float64。为什么会这样?是的,我可以在之后进行转换,但就像我说的那样,我已经接近我的 RAM 的极限,即使在处理步骤期间,我也会尽量保持一切尽可能小。下面是我得到的一个例子。
import scipy
a = scipy.ones((600,600,4044), dtype=scipy.float32)
print(a.dtype)
a_mean = scipy.mean(a, 2, dtype=scipy.float32)
a_std = scipy.std(a, 2, dtype=scipy.float32)
print(a_mean.dtype)
print(a_std.dtype)
返回
float32
float32
float32
【问题讨论】:
-
切换到 64 位 Python 会容易得多
-
为什么?我不明白这会有什么帮助。
-
因为那样你就不会被限制在 32 位地址空间。这就是我所期望的真正限制,而不是物理 RAM。
-
那会怎样使用更少的内存?
-
它不会使用更少的内存。但这将允许您的进程使用更多内存。我假设实际限制是地址空间而不是物理 RAM。我错了吗?机器有多少物理内存?机器是64位系统吗?