【发布时间】:2012-01-07 05:36:33
【问题描述】:
我正在尝试使用numpy.cov 获取大型矩阵的协方差。我收到以下错误:
似乎这对于 32 位机器/构建并不少见(我有一个 64 位 mac os x 10.5,但是使用 32 位 python 和 numpy 构建,因为我在构建 numpy+scipy+matplotlib 时遇到了麻烦) 64 位安装)。
那么在这一点上,如果不更换机器(目前我无法使用其他机器),那么推荐的行动方案是什么,可以让我继续进行分析?导出到 fortran/C?有一个简单的(r)解决方案吗?感谢您的建议。
【问题讨论】:
-
您是否要映射超过 4GiB 的数据?
-
64 位是选项,但您的问题在那个大小下是否可以处理。这种大小的密集协方差矩阵表明操作可以永远运行!您可能会发现 64 位版本的 R 在 Mac 上是稳定的。
-
哎呀,我猜不是。
sys.getsizeof(x)只给了我 60 个字节。虽然我的数组是 15000 x 4,但我没有按预期使用rowvar=False(输入相对于 R 的约定进行了转置)。也许这是错误......矩阵转置后,它可以工作。不过确实很奇怪。 -
感谢您对 64 位 Mac 的建议——我倾向于认为 R 在内存管理方面更差(这就是为什么我一度为这个项目切换到 Python)但我完全忘记了64 位的优势。
-
R 在内存管理方面并不差或好。这些都被运送到 BLAS 或优化的 BLAS 实现。在我的例子中,我只是使用内存映射文件,并且很容易地生成和存储了 20k x 20k 协方差矩阵。分片处理数据没什么大不了的……