3

100000 列 (変数) と 100 行 (観察) の行列があります。すべてをすべてと関連付ける (ピアソン) 必要があります。私はcorrに比べてはるかに高速であることがわかったので、corrcoefを使用しています。25000 列の行列を取得すると、操作に 15 秒かかります。ただし、数分後にサイズを 50000 に増やすと、matlab RAM が 16Gb に増加し、matlab (ウィンドウを含む) がフリーズし始めます。助言がありますか?分割に関する特許はありますか? 列ごとに計算すると、非常に非効率的になります...

助けてくれてありがとう、ヴァディム

4

1 に答える 1

2

このような大きな配列のブルート フォース計算は、64 ビット バージョンの matlab に加えて、その大きな配列を保存するのに十分なメモリがないか、または他の方法で配列を保存することなしには不可能です。アレイをオフラインで保管し、使用するときに必要なものだけを持ち込むことができます。

さらに、これらの数値が常に小さい整数である場合は、uint8 または int8、または論理配列 (1 つの配列であっても) を使用します。これらはすべて double 配列と比較してメモリ要件を削減します。配列がまばらな場合は、まばらな配列操作を使用してください。

別の方法は、Parallel Computing Toolbox (およびMATLAB Distributed Computing Server ) を使用して、複数のマシンのメモリを同時に利用することです。これにより、次のように記述できます。

matlabpool open <a large number>
x = distributed.zeros( 100000, 100 );

大きな行列を扱うには、このスレッドも参照してください...

于 2013-01-22T21:56:12.447 に答える