2017-08-25 21 views
0

同様の例外メッセージが3つあります。残念ながら、質問のどれも答えられず、コメントは私の問題を解決できませんでした。オクターブ - メモリが足りないか、Octaveのインデックスタイプが大きすぎます

Windows 10システムでは、64ビットバージョンでOctave 4.2.1を使用し、合計16 GB RAM、実行時には11 GBまで空けています。 私は、Octaveが次の例外を思い付く10×60000行列で60000×10行列を掛けるしようとすると:

error: out of memory or dimension too large for Octave's index type

この乗算は60000 X 60000マトリックスにつながるので、ために問題になることはありません64ビットのインデックス。 私もできませんzeros(60000,60000);

私は間違っている何かを得ることはありません。誰かが私を正しい方向に向けることができますか?しばしばそうであるように、このエラーが頻繁に誤解され

答えて

3

(多分、我々はすでにオクターブトラッカーのバグとしてこれに対処すべきである;))

>> 60000*60000 
ans = 3.6000e+09 
>> intmax 
ans = 2147483647 
>> 60000*60000 > intmax 
ans = 1 

すなわち、結果の60000x60000行列の要素数はシステムでサポートされている最大整数表現よりも大きいため、整数インデックスを使用してそのような行列を線形に索引付けする方法はありません。

これがデフォルトにしない傾向があるが、残念ながらそれはあなたのように、あなたが望むかもしれないほど簡単ではないのですとしても、実際 64ビットのインデックスを使用するために、あなたは、そのようにオクターブをコンパイルする必要があります」それぞれの64ビットサポートライブラリも使用する必要があります。その詳細はhereです。

あなたの行列が実際にはまれである場合、スパース行列を代わりに使用することは可能でしょう。そうでない場合、基本的には「ビッグデータ」を使用しています。大規模な配列をファイルにブロック処理/マッピングするなどの回避策を見つける必要があります。一般的な「ビッグデータ」テクニックを読む価値があります。残念ながら、オクターブはまだmatlabのmemmapfileコマンドをサポートしていないようですが、fwrite/fread/fseekを使って、ファイルから適切な範囲を適切に読み取ることができます。

+2

Tatsuroは、実験的な大規模配列のサポート(http://www.tatsuromatsuoka.com/octave/Eng/Win/)で構築されたいくつかの非公式のウィンドウを提供しました。そして、私は64bit * INDEXING *をオンラインで構築しています。 Yannicはディスクリストを探すためにメーリングリストを見ているかもしれない – Andy

+1

非常に詳細な回答ありがとうございました:) –

+0

エラーメッセージは、人々がメモリ制限にぶつかっていると思うようになります。このエラーメッセージを分割できないようにするフードの下では何が起こっているので、ユーザーはどのエラーメッセージを聞いたのですか? –

関連する問題