0

60000 x 300 の行列 call がありますX。ペアごとのユークリッド距離を見つけようとしています。pdistmatlab (統計ツールボックス) の関数がこれを実行できることを私は知っています。ただし、コードを入力するとpdist(X)、次のエラー メッセージが表示されます。

Error using pdistmex
Out of memory. Type HELP MEMORY for your options.

Error in pdist (line 252)
    Y = pdistmex(X',dist,additionalArg);

修正のためのアドバイスはありますか?マトリックスのサイズが大きすぎませんか?

4

1 に答える 1

1

簡単に言えば、はい、pdistメソッドはメモリを大量に消費しており、コンピュータはそれを供給することができません。たとえば、6000 x 300 の行列 X を使用しても、X と Y を使用して次の変数サイズを取得しますwhos X Y

>> whos X Y
  Name         Size                      Bytes  Class     Attributes

  X         6000x300                  14400000  double              
  Y            1x17997000            143976000  double    

今、私の記憶状態(32ビットマシン上):

>> memory
        Maximum possible array:             677 MB (7.101e+008 bytes) *

Y = pdist(X)したがって、これは約 1.44 *10^8 バイトの配列を生成するのに対し、可能な最大配列サイズは約 5 倍のオーダーであるため、実際には計算でメモリ制限を押し上げています。マトリックスが大きくなると、システムが満足できない場合があります。60000 x 300 のマトリックスは、179970000 値の Y 配列を生成します!

このサイズの行列のユークリッド距離を本当に計算する必要がある場合は、回避策があるかもしれません。もしそうなら、もっとお手伝いできるかもしれません...

于 2013-07-19T22:28:26.127 に答える