WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Speicher und Geschwindigkeitsproblem

 

chaplin3006

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.05.2012, 08:43     Titel: Speicher und Geschwindigkeitsproblem
  Antworten mit Zitat      
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 Wink

Mein Code:
Code:

function [G, S, C, R] = KNN(data, k)

d = size(data,2);
n = size(data,1);
% k-neighrest neighbours and their distances
[I,Dist] = knnsearch (data, data, 'K', k + 1);

% distances to the k-NN
Dist = Dist(:,2:end);
R = Dist (:, k);

% indices of the k-NN
I = I(:,2:end);

%adjacency matrix in sparse:

% 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);

 


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.05.2012, 10:24     Titel:
  Antworten mit Zitat      
Hallo,

Empfehlungen:
große temporäre Variablen mit clear löschen, wenn sie nicht mehr gebraucht werden.

G als logical sparse Matrix erstellen:
Code:


In welcher Zeile tritt die Fehlermeldung "Unexpected Standard exception from MEX file." auf?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.05.2012, 10:44     Titel:
  Antworten mit Zitat      
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)

Ist Matlab für solche Vorhaben eher ungeeignet?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.05.2012, 11:54     Titel:
  Antworten mit Zitat      
Hallo,

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
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.