これは「問題の詳細を知る必要がある」ことです: 私がコーディングしているアルゴリズムの一部として、サイズ 3000X400 の行列を入力として受け取ります。すべての行に対して、サイズが 400x400 の正方行列を作成する必要があります。これを行った後、数値 R(i,j) を計算する必要があります。ここで、i,j はすべての行に対して生成された正方行列 (400x400) です。
必要に応じて、相関行列の計算と考えてください。相関の代わりに、生成された正方行列で動作する独自のアルゴリズムがあります。0<=i<3000 および j=i+1 から 3000 の R(i,j) を計算する必要があります
これが私の質問です。正方行列を指す 3D 配列を動的に割り当てます。つまり、3D 配列は (3000X400X400) です。これを行うのに十分なメモリがありません。小さいサイズ、つまり約 (800*400*400) の場合、完全に機能するコードがあります。しかし、それを (3000*400) ケースに拡張するのに十分なメモリがないことは明らかです。どうすればいいですか?
1つの(それほど優れていない)解決策:すべての正方行列を計算する代わりに、iの正方行列を計算し、j = i + 1から3000までループするときに、各jの正方行列を再計算しますR(i,j) を計算します。明らかに、私は大量の行列を再計算していますが、少なくとも機能するのはコードです。
皆さんが思いつくより速い解決策はありますか? 私は定性的な解決策で十分な能力を持っています。私は正方行列を計算し、それらをファイルに書き込んで、R(i,j) を計算する必要があるときにそれらを読み取ることを考えていました。
アドバイスありがとうございます!!
ファイルへの書き込みとファイルからの読み取りを使用するソリューションは、かなり遅くなりました。非 Hadoop のアイデアはありますか?