Verfasst am: 25.05.2012, 08:43
Titel: Speicher und Geschwindigkeitsproblem
Hallo!
Ich habe ein Problem mit meinem Matlab-Programm. Als input habe ich viele Daten (sollten eigentlich min. 10 000 sein) und erstelle daraus einen k-nearest neighbor graph, d.h ich berechne zunächst für jeden Datenpunkt die k nächstegelegenen Punkte mit der Funktion knnsearch.
Danach erstelle ich einen Graphen, indem jeder Datenpunkt mit seinen k nächsten Nachbarn verbunden ist. Die Adjazenzmatrix speichere ich in sparse, da k im Vergleich zu n klein ist (ca. sqrt(n)).
Anschließend möchte ich die verbundenen Komponenten des Graphen mit graphconncomp berechnen.
Leider bekomme ich ab ca. 8000 Datenpunkten ein Problem bei der Erstellung der Adjazenzmatrix beim Befehl G+G' mit der Meldung:
Out of memory. Type HELP MEMORY for your options.
Bei 9000 Datenpunkten bekomme ich einen anderen Fehler:
Unexpected Standard exception from MEX file.
What() is:bad allocation
Ich kenne mich mit Speicher und so nicht gut aus und weiß nicht, was ich jetzt tun soll.
Zusätzlich taucht das Problem auf, dass mein Programm sehr lange braucht. Aber das ist erst das nächste Problem
% rows with non-zero entries: k entries for each data point
i = fix([k :(((n+1)*k)-1)]/k);
% columns with non-zero entries: indices of k-NN
j = reshape(I',1,k*n);
% compute symmetric matrix G
G = sparse(i,j,1,n,n);
G = G + G'; %% there is a 2 as entrie for the mutual kNN graph
%% CC % connected components, S number of components [S, C] = graphconncomp(G,'Directed', false);
In welcher Zeile tritt die Fehlermeldung "Unexpected Standard exception from MEX file." auf?
Grüße,
Harald
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 25.05.2012, 10:44
Titel:
Danke Harald für die Tips.
Ich kann die Matrix leider nicht in logical schreiben, da sie an manchen Stellen 2er als Einträge hat, die ich später noch brauche.
Das mit dem Speicher freigeben hat aber funktioniert!
Das Problem mit graphconncomp liegt in:
Error in graphconncomp (line 99)
wenn das mit 8000 Elementen geht und mit 9000 nicht, dann würde ich vermuten, dass da der Speicher ausgeht.
Vorschläge:
- Das Programm auf einem Rechner mit mehr Speicher ausführen.
- Den Technischen Support von MathWorks kontaktieren, um die Problemursache zu identifizieren.
Sollte meine Vermutung von oben stimmen, dann sehe ich das Problem hier eher in der Größe des Problems bzw. der mangelnden Ressourcen des Systems als in MATLAB.
Grüße,
Harald
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.