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