我正在尝试将层次聚类应用于由14039个用户组成的数据集。每个矢量具有10个特征,其中每个特征基本上是由该用户标记的标签的频率。 我使用Scipy API进行聚类。 现在我需要计算这14039个用户之间的成对距离,并将距离矩阵传递给联动函数。计算scipy中成对距离时的内存错误
import scipy.cluster.hierarchy as sch
Y = sch.distance.pdist(allUserVector,'cosine')
set_printoptions(threshold='nan')
print Y
但我的程序给我的MemoryError在计算距离矩阵本身
File "/usr/lib/pymodules/python2.7/numpy/core/numeric.py", line 1424, in array_str
return array2string(a, max_line_width, precision, suppress_small, ' ', "", str)
File "/usr/lib/pymodules/python2.7/numpy/core/arrayprint.py", line 306, in array2string
separator, prefix)
File "/usr/lib/pymodules/python2.7/numpy/core/arrayprint.py", line 210, in _array2string
format_function = FloatFormat(data, precision, suppress_small)
File "/usr/lib/pymodules/python2.7/numpy/core/arrayprint.py", line 392, in __init__
self.fillFormat(data)
File "/usr/lib/pymodules/python2.7/numpy/core/arrayprint.py", line 399, in fillFormat
non_zero = absolute(data.compress(not_equal(data, 0) & ~special))
MemoryError
任何想法如何解决这一问题?我的数据集是否太大?但我猜集群14K用户不应该太多,它应该导致内存错误。 我在i3和4 Gb Ram上运行它。 我也需要应用DBScan集群,但也需要距离矩阵作为输入。
任何建议表示赞赏。
编辑:只有当我打印Y时才会出错。任何想法为什么?
我想你错过了他的编辑。只有在尝试打印整个距离矩阵时才会出错。它正在构建耗尽他的记忆的巨大弦乐。 – agf 2012-04-12 00:09:24
我做到了。答案更新以反映编辑。谢谢! – 2012-04-12 04:38:08
预先编辑的答案对于相关问题确实很有帮助。请保留这个答案,以便我可以将其他问题链接到它。 – ximiki 2018-01-23 16:36:29