我有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);
有任何修复建议吗?矩阵尺寸太大了吗?
答案 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数组!
如果您真的需要计算这个大小的矩阵的欧几里德距离,可能会有变通方法,如果是这样,我可以帮助您更多...