原来的机器是win xp,2G内存,Intel 2G双核CPU,跑KMeansCluster对20080x129的矩阵进行聚类时,目标聚类数设定为100,出现内存不够的提示。将目标聚类数试着往小调,当到30时可以跑通。
刚好要换新机器,于是等了几天,看看新机器上内存加大后能不能跑。
新机器是win 7,Intel 2Quad CPU,四核,4G内存。
问题依旧,还是只能接受30。从资源管理器观察,内存最多时消耗到2.5G。
看来不是加大物理内存就能解决的问题。应该是代码中某个步骤无法进行大量数据操作的问题了。
??? Out of memory. Type HELP MEMORY for your options.
Error in ==> repmat at 80
B = A(:, ones(siz(2), 1));
Error in ==> DistMatrix at 29
D{k}= repmat(B(:,k),1,hA);
Error in ==> kMeansCluster at 66
d=DistMatrix(m,c); % calculate objcets-centroid distances
Error in ==> ClusterFeatures at 30
[y,c,counters]=kMeansCluster(Temp,100,1);
关于out of memory,网上很多人也碰过这个问题,
mathworks.com上有详细的介绍,以及相应的策略。
http://www.mathworks.com/support/tech-notes/1100/1107.html
还有个中文的:
http://hi.baidu.com/zwwcqu/blog/item/2ee2261ef7b9eecfa6866943.html
按照这些去做,还是不能解决问题。看来还是得从代码着手,提高性能,降低内存占用。
在网上继续找kmeans代码的同时,发现原来matlab自带就有kmeans算法的实现,试了一下,内存占用很小,2分钟处理完了我的
20080*129矩阵。