hat*_*rix 10 python numpy bigdata
我正在尝试使用大矩阵的协方差numpy.cov.我收到以下错误:
Python(22498,0xa02e3720) malloc: *** mmap(size=1340379136) failed (error code=12) *** error: can't allocate region *** set a breakpoint in malloc_error_break to debug Process Python bus error
对于32位机器/构建来说这似乎并不少见(我有一个64位的mac os x 10.5,但使用32位python和numpy构建,因为我在64-上构建numpy + scipy + matplotlib时遇到了麻烦位安装).
那么在这一点上,如果没有切换机器(目前没有其他可用的话),那么我将继续进行分析的推荐行动方案是什么?出口到fortran/C?有一个简单的(r)解决方案吗?谢谢你的建议.
为了在你的地方,我会尝试将矩阵“pickle”(保存)在我的硬盘上,关闭 python ,然后在命令行中重新打开 pickeled 文件并在“fresh 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
Run Code Online (Sandbox Code Playgroud)
这里你关闭python。您的文件应以“M.pic”形式保存在您的主目录中。
import cPickle
import numpy
M = cPickle.load( open( "~/M.pic", "r") )
M = numpy.coa( M )
Run Code Online (Sandbox Code Playgroud)
如果仍然不起作用,请尝试为您的数据设置“良好”的数据类型。numpy接缝默认使用'int64'的dtype'float64'。这是巨大的,如果您不需要这种精度,您可能需要将其减少为“int32”或“float32”。
import numpy
M = numpy.array([[1,2],[3,4]] , dtype.float32 )
Run Code Online (Sandbox Code Playgroud)
事实上,我可以向您保证 C/Fortran 不适合您。Numpy 已经用 C/Fortran 编写,并且可能是由比你和我更聪明的人编写的;)
出于好奇,你的矩阵有多大?你的腌制文件有多大?