カスタム距離測定を使用して階層クラスタリングを実行しようとしています。すべての計算を Python で実行し、データ構造を R に渡してクラスタリングを行います
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
では、最終的に、オブジェクトを取得するためのよりメモリ効率の良い方法はありますか? それとも、私が使用できる別の方法がありますか? cluster
オブジェクトを使用しないR のライブラリの他のメソッドをいくつか見つけましdist
たが、これらのメソッドは組み込みの距離メトリックを使用します。
前もって感謝します!