2011-07-20 9 views
0

numpy行列の最大要素/大文字は何ですか?numpy行列の最大サイズは何ですか?numpy行列の最大要素/サイズ?

上記のコードは、可変マトリクスサイズでメモリエラーを返します...どのような環境物に依存しますか(連続して使用できるメモリの数?

for ret in xrange(5000,7000,50): 

    res = [] 
    for x in xrange(ret): 
     temp=[] 
     for y in xrange(ret): 
      temp.append(random.random()) 
     res.append(temp) 

    print "r" 
    r = numpy.mat(res) 
    print "s" 
    s = numpy.mat(res,dtype='f4') 
    print "t" 
    w = numpy.mat(res,dtype('f8')) 

質問:「メモリエラー」はいつですか?

ps:私は最後のpythonとnumpyをWindowsで利用できます(私は知っています...)7 64bit。

+0

'res'は各ループでオーバーライドされます。私はこれがあなたの意図ではないと思いますか?あなたの最後の行は間違っています、 'w = numpy.mat(res、dtype = 'f8')'でなければなりません。 'ret'が元のコードでオーバーライドされない場合、結果のリストが大きいため、MemoryErrorを取得する可能性があります。 – schlamar

+0

内側の2つのループは、 'r = np.random.random((ret、ret)) 'で置き換えることができます。 –

+0

また、メモリエラーはnumpyではなく、ビルドしているリストから来ている可能性があります。ネストされたリストを使用して数値配列を作ることは、それを直接作ることよりもはるかに多くのメモリを使用します。 7000x7000はあまり大きくありません。 –

答えて

1

Upper memory limit?を参照してください。

メモリエラーが返ったときは、大きなオブジェクトの1つにメモリを割り当てるときの答えです。あなたがresの後の行を割り当てる時までに、これまで以上に多くのメモリが必要になるため、numpyの行列は指してから、sまでガベージコレクションされません、またはt(別のオブジェクト(次の反復で作成された新しいマトリックス)で)。

関連する問題