10

我正在尝试使用numpy.cov. 我收到以下错误:

Python(22498,0xa02e3720) malloc: *** mmap(size=1340379136) 失败(错误代码=12)
*** 错误:无法分配区域
*** 在 malloc_error_break 中设置断点进行调试

处理 Python 总线错误

似乎这对于 32 位机器/构建并不少见(我有一个 64 位 mac os x 10.5,但是使用 32 位 python 和 numpy 构建,因为我在 64- 上构建 numpy+scipy+matplotlib 时遇到了麻烦)位安装)。

那么在这一点上,如果不更换机器(目前我无法使用其他机器),那么推荐的行动方案是什么,可以让我继续进行分析?导出到 fortran/C?有一个简单的(r)解决方案吗?感谢您的建议。

4

1 回答 1

1

为了在你的位置,我会尝试在我的硬盘驱动器上“腌制”(保存)矩阵,关闭 python ,然后在命令行中重新打开腌制文件并在“新鲜的 python”实例上进行计算。

我会这样做,因为也许你的问题是在计算协方差之前。

import cPickle
import numpy
M = numpy.array([[1,2],[3,4]]) # here it will be your matrix
cPickle( M , open( "~/M.pic", "w") ) # here it's where you pickle the file

在这里你关闭 python。您的文件应作为“M.pic”保存在您的主目录中。

import cPickle
import numpy
M = cPickle.load( open( "~/M.pic", "r") )
M = numpy.coa( M )

如果它仍然不起作用,请尝试为您的数据设置一个“好的”dtype。numpy 接缝默认使用 'int64' 的 dtype 'float64'。这是巨大的,如果您不需要这种精度,您可能希望将其减少到“int32”或“float32”。

import numpy
M = numpy.array([[1,2],[3,4]] , dtype.float32 )

事实上,我可以向您保证,C/Fortran 不适合您。Numpy 已经用 C/Fortran 编写,并且可能是由比你我更聪明的人编写的;)

好奇,你的矩阵有多大?你的腌制文件有多大?

于 2011-11-28T14:31:52.743 回答