Speicherprobleme mit der Funktion as.dist in R / rpy2
Frage
Ich versuche, ein hierarchisches Clustering mit einem benutzerdefinierten Abstandsmaß durchzuführen. Ich führe alle Berechnungen in Python durch und übergebe dann die Datenstrukturen an R, um das Clustering durchzuführen.
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)
Meine Entfernungsmaße werden also in einer Python-Liste gespeichert, die in eine R-Matrix konvertiert wird, die dann in ein dist
-Objekt konvertiert wird, das für das Clustering erforderlich ist. Dies funktioniert bis zu einem gewissen Grad. Wenn die Matrix jedoch zu groß wird und ich den folgenden Fehler erhalte:
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
Dies tritt an dem Punkt auf, an dem ich in ein dist
-Objekt (as.dist
) konvertiere. Ich habe nicht getestet, bei welcher Größe es auseinander fällt, aber es funktioniert mit einer 3000x3000-Matrix, aber es schlägt mit einer 6500x6500-Matrix fehl, also irgendwo dazwischen.
Ich verwende die del
-Funktion in Python, um unnötige Objekte aus dem Speicher zu entfernen, aber nach dem, was ich gelesen habe, garantiert dies nicht, dass der Speicher sofort zur Verwendung verfügbar wird.
Gibt es letztendlich eine speichereffizientere Möglichkeit, ein dist
-Objekt abzurufen? Oder gibt es vielleicht eine alternative Methode, die ich verwenden könnte? Ich habe einige andere Methoden in Rs cluster
-Bibliothek gefunden, die kein dist
-Objekt verwenden, aber diese Methoden verwenden integrierte Entfernungsmetriken.
Vielen Dank im Voraus!