0

我有一个 60000 x 300 矩阵调用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 回答