|
|
Variablen aus eingelesenem MAT-File in Schleife löschen |
|
Melanie |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.08.2009, 16:58
Titel: Variablen aus eingelesenem MAT-File in Schleife löschen
|
|
|
|
|
Hallo liebe Helfer (hoffentlich),
ich suche schon seit Stunden nach einer Lösung meines Problems, leider finde ich aber nichts, was mir weiterhilft.
Ich mache eine Bildauswertung und muss dafür bis zu 1500 Bilder einlesen. Diese stehen mir als Matrix in einem MAT-File zur Verfügung. Ich lese in einer for-Schleife nun die MAT-Files ein, schreibe die für mich wichtige Matrix als Bild heraus und lese danach das nächste File ein, um nach Beenden der Schleife alle generierten Bilder zu mitteln.
Schön und gut, leider hat jedes Bild knapp 600KB und mein PC ist am Ende seiner Speicherkräfte. Ich möchte also nach jedem Schleifendurchgang die Variablen aus der eingelesenen MAT-Datei löschen, nicht aber die anderen Variablen meiner Schleife, geschweigedenn meines Programms.
Hier mal schematisch die Schleife, um die es geht:
In der Variable "this_name" steht nun genau der Variablenname (=Dateiname des Bildes ohne die Endung .MAT), der unter "whos" mit 600KB aufgeführt ist. Wie lösche ich denn nun den Inhalt von this_name?
Habe einen Tipp mit sprintf gelesen, aber irgendwie geht das nicht. sollte so heißen:
Führt also nicht zum Ziel. Außerdem sind ja noch weitere Variablen aus dem MAT-File eingelesen worden (in der Form Dateiname_Datum, Dateiname_Zeit etc.), wenn die auch noch verschwinden würden, wär das prima
Habt ihr einen Tipp für mich? Ich verzweifle langsam, da ich mit einem überlasteten Rechner echt nicht vernünftig arbeiten kann
Würde mich über Antworten freuen!
Viele Grüße
|
|
|
|
|
Olli |
Forum-Anfänger
|
|
Beiträge: 45
|
|
|
|
Anmeldedatum: 19.08.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.08.2009, 18:20
Titel:
|
|
Eventuell mit der Funktion "clear"?
Ansonsten wäre da eventuell noch die Möglichkeit die Variable mit Null bzw leer zu überschreiben?!
Vielleicht verstehe ich auch die Frage falsch.
|
|
|
Melanie |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.08.2009, 18:37
Titel:
|
|
Hi Olli,
this_name enthält den Variablennamen der Variable, die ich löschen möchte, Beispiel:
Das Problem ist, wenn ich
benutze, dass dann nur die Variable this_name gelöscht wird, nicht aber die eigentliche Variable (nach dem Beispiel oben "Dateiname"), die ja bloß durch this_name aufgerufen wird.
Wärs nur EINE Variable à la "Dateiname" wäre das ja manuell möglich, sind aber 1500 Stück, die sich im Laufe der Schleife aufsummieren...
Herrje, vielleicht muss ich direkt beim Indizieren etwas anders machen...
|
|
|
Olli |
Forum-Anfänger
|
|
Beiträge: 45
|
|
|
|
Anmeldedatum: 19.08.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.08.2009, 19:18
Titel:
|
|
|
|
|
Dann hab ich wohl das Problem nicht verstanden. Ich dachte das this_name dein Variablenname ist in den halt das Bild als Matrix reingeladen wird. Durch die Schleife müßte dann doch jeweils das neue Bild in der this_name über das alte drüber gebügelt werden. Oder du machst mittels Hochzähler nen Array aus deiner Variablen.
dann müßtest du doch mittels des clear-Befehls einzelne Elemente aus deinem Array rauslöschen können oder nicht? Ich bin noch neu in Matlab ich versuch das Problem jetzt nur anhand eines Lösungsweges von anderen Programmiersprachen anzugehen.
Vielleicht könntest du ja mal den kompletten Code hochladen das man das mal lokal testen und nach einer Lösung suchen kann.
P.S. ich hab auch vorgestern in einem Thema gelesen das es helfen soll wenn man vorher die Variable bzw Matrix mit Nullen belegt also schon erstellt, damit Matlab genügend Speicher sichern kann. Da wollte ein User 500.000 Datensätze einlesen und jemand meinte das das für Matlab eigentlich kein Problem wäre.
|
|
|
Gast |
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.08.2009, 20:08
Titel:
|
|
Hach Olli,
manchmal kommt man selbst nicht auf die simpelsten Zusammenhänge... Dank deiner Hinweise ist mir aufgefallen, dass ich den load-Befehl einfach so hingeschrieben habe - kein Wunder, dass ich nachher nicht mehr drauf zugreifen kann!
Ich habs also nun gelöst, indem ich in der Schleife einfach
gesetzt habe. Jetzt kann ich vor dem Ende der Schleife die Variablen "inhalt" und "bildmatrix" mit clear löschen und die 600KB sind direkt mit gelöscht.
Dadurch hat sich die Dauer des Rechenprozesses um sicherlich 500% und aufwärts verkürzt
(Wer hat schon ein Gig Arbeitsspeicher? Meine 5 Jahre alte Möhre sicher nicht )
Also danke dir, kann ich ja am Freitag Abend doch noch friedlich in den Feierabend starten...
|
|
|
denny |
Supporter
|
|
Beiträge: 3.853
|
|
|
|
Anmeldedatum: 14.02.08
|
|
|
|
Wohnort: Ulm
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 21.08.2009, 20:22
Titel:
|
|
Hallo,
Zitat: |
In der Variable "this_name" steht nun genau der Variablenname (=Dateiname des Bildes ohne die Endung .MAT), der unter "whos" mit 600KB aufgeführt ist. Wie lösche ich denn nun den Inhalt von this_name?
Habe einen Tipp mit sprintf gelesen, aber irgendwie geht das nicht. sollte so heißen: |
Die Variablen kann man nur mit clear Befehl aus dem Speicher löschen
|
|
|
denny |
Supporter
|
|
Beiträge: 3.853
|
|
|
|
Anmeldedatum: 14.02.08
|
|
|
|
Wohnort: Ulm
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 21.08.2009, 20:29
Titel:
|
|
Hallo,
Genau so ist es besser,
man soll wirklich load einen variablen zuweisen,
soll speicher-effektiver sein, als ohne.
ich habe da noch einen Verbesserungsvorschlag:
Stichwort Dynamische Felder, sind schneller als getfield
|
|
|
Melanie |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.08.2009, 21:03
Titel:
|
|
Hallo denny,
hab deinen Verbesserungsvorschlag eingebaut, dankeschön!
Wahrscheinlich ist mein ganzes Skript noch verbesserungswürdig, aber jetzt läufts wenigstens
Hab erst vor 3 Wochen angefangen mit Matlab und immerhin jetzt eine komplette Bildauswertung programmiert - damit bin ich jetzt erstmal zufrieden.
Danke für die Tipps - tolles Forum hier!
|
|
|
Olli |
Forum-Anfänger
|
|
Beiträge: 45
|
|
|
|
Anmeldedatum: 19.08.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.08.2009, 21:47
Titel:
|
|
Meld dich doch einfach mal im Forum an. Hier gibt es auch irgendwo ein Thema welches kostenlose Skripte und Howto`s zu Matlab verlinkt. Bin auch erst durch Zufall vor ein paar Tagen wärend meines Matlab Kurses in der Uni auf das Forum gestoßen. Sah vielversprechend aus und so hab ich mich schnell mal registriert.
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.
|
|