as.dist功能内存的问题我想执行使用自定义的距离度量一个层次聚类。我执行Python中所有的计算,然后通过数据结构与R做聚类与R/rpy2
import rpy2.robjects as robjects
r=robjects.r
from rpy2.robjects.packages import importr
stats = importr('stats')
m = r.matrix(robjects.FloatVector(list_of_data), ncol=size, byrow=True)
dist_mat=stats.as_dist(m)
hc=stats.hclust(new_dist_mat)
所以我的距离测量在Python列表举行,转化为R矩阵,然后将其转化成dist
聚类所需的对象。这在一定程度上起作用。然而,当基质变得太大,我得到这个错误:
python(18944,0xb0081000) malloc: *** mmap(size=168898560) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
Error: cannot allocate vector of size 161.1 Mb
这发生在我爱情转化为dist
对象(as.dist
)点。我还没有测试它的尺寸是多少,但它适用于3000x3000的矩阵,但是在6500x6500的矩阵中失败,所以在中间的某处。 我使用Python中del
函数尝试从内存中删除任何不必要的对象,但是从我读过这并不能保证内存将立即可用。
因此,最终,有没有更多的内存高效的方式来获得dist
对象?或者,我可以使用另一种方法吗?我发现R中的cluster
图书馆借了一些其他的方法,不使用dist
对象,但这些方法都使用内置的距离度量。
在此先感谢!
谢谢你的建议。猜猜我需要重新思考我的方法 – steiny 2011-03-21 11:03:57