Matlab欧几里德成对平方距离函数

时间:2013-07-19 22:08:53

标签: matlab

我有60000乘300矩阵调用X。我试图找到成对的欧几里德距离。我知道matlab(stats工具箱)中的pdist函数可以做到这一点。但是,当我输入代码pdist(X)时,我收到以下错误消息:

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

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

有任何修复建议吗?矩阵尺寸太大了吗?

1 个答案:

答案 0 :(得分:1)

简单地说是,pdist方法对您的内存感到饥渴,而您的计算机无法提供它。例如,即使使用6000乘300矩阵X,我也可以使用whos X Y获得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乘300的矩阵将生成一个179970000值的Y数组!

如果您真的需要计算这个大小的矩阵的欧几里德距离,可能会有变通方法,如果是这样,我可以帮助您更多...