10

を使用して大きな行列の共分散を取得しようとしていnumpy.covます。次のエラーが表示されます。

Python(22498,0xa02e3720) malloc: *** mmap(サイズ=1340379136) 失敗しました (エラーコード=12)
*** エラー: リージョンを割り当てられません
*** デバッグするために malloc_error_break にブレークポイントを設定します

プロセス Python バス エラー

これは 32 ビット マシン/ビルドでは珍しいことではないようです (私は 64 ビット mac os x 10.5 を持っていますが、64-bit で numpy+scipy+matplotlib をビルドするのに問題があったため、32 ビット python と numpy ビルドを使用しています)。ビットの取り付け)。

では、この時点で、マシンを切り替えない場合 (現時点では他に利用できるマシンはありません)、分析を続行できるようにするための推奨される一連のアクションは何でしょうか? 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 を設定してみてください。デフォルトで 'int64' の dtype 'float64' を使用する numpy seams。これは非常に大きいため、この精度が必要ない場合は、'int32' または 'float32' に減らすことをお勧めします。

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

実際、C/Fortran は選択肢にないことを保証できます。Numpy はすでに C/Fortran で書かれており、おそらくあなたや私より賢い人たちによって書かれています ;)

好奇心によると、あなたの行列の大きさはどれくらいですか? ピクルスファイルの大きさは?

于 2011-11-28T14:31:52.743 に答える