Mittelwerte einzelner Matrixelemente aus mehreren Matrizen
peter.krumov
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 08.06.2012, 00:35
Titel: Mittelwerte einzelner Matrixelemente aus mehreren Matrizen
Hallo zusammen,
ich habe meine Messdaten in 49 Matrizen der Größe [480x640] geladen. Nun würde ich gern die Mittelwerte über diese 49 Datensätze bilden und zwar elementenweise und das Ergebnis als neue Matrix ausgeben lassen. Den Mittelwert aus zwei [3x3] Matrizen bekomme ich ja noch hin, aber ich habe nur leider keine Ahnung, wie ich das bei so vielen Elementen schaffen soll?
Ah vielen Dank! Bei einem einfachen Beispiel funktioniert das wunderbar.
Ich habe meine Matrizen einzeln gespeichert. Nun versuche ich sie zu einer Matrix zusammenzufassen und benutze dabei eine for-Schleife. Leider bricht die Schleife irgendwann ab mit der Meldung:
??? Out of memory.
Dann verbraucht das nur den doppelten Speicher.
Wenn deine Zahlen vom ersten Posting noch stimmen,
sind das 234 MB mehr, sollte also kein Speicherproblem geben.
Grüße
Sirius
peter.krumov
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 09.06.2012, 16:43
Titel:
Hallo, meine Messwerte habe ich alle in einer eigenen Matrix gespeichert, sodass ich 50 Matrizen A00 bis A49 habe. (Es sind 50, nicht 49 )
Nun habe ich versucht, alle A-Matizen in die dreidimensionale Matrix C zu packen. Dies gelingt aber nur bei maximal 40 Matrizen, ansonsten tritt das Memory-Problem auf.
Ich dachte schon, die Operationen sind für eine Schleife zuviel, deswegen habe ich drei Schleifen daraus gemacht. Das hat aber leider nichts geholfen.
Den "cat"-Befehl kannte ich noch gar nicht. Funktioniert wunderbar, vielen Dank für den Tipp! Aber gibt es hier nicht auch die Möglichkeit, die Werte aus den A-Matrizen über eine Schleife aufzurufen? Sonst ist es ja viel Aufwand mit dem Eintippen.
%Anzahl der Kopfzeilen vor den eigentlichen Messwerten angeben!
headlines = 9;
% function comma2point(Datei): % Generate a new file named Oldfilename_Modified.ending. In the new File all % ',' are changed to '.' Needs a full datapath and filename as input.
%Einlesen aller Dateien über variablen Datei-Namen.
% A = importdata(filename, delimiter, nheaderlines) loads data from ASCII file filename, reading numeric data starting from line nheaderlines+1.
%Einlesen der mod. Daten
%Ausgabe in Matrizen A00-A49
Die Methode, einen Satz von Variablen A00 bis A49 zu erzeugen, sollte man vermeiden, siehe: http://matlab.wikia.com/wiki/FAQ#Ho.....2C....2CA10_in_a_loop.3F[. Der Umweg, die Variablen dann noch per EVALIN('base') im Base-Workspace zu erzeugen, ist auch gruselig. Die Speicherung in einem normalen Areray im lokalen Workspace wäre viel effizienter und übersichtlicher.
Das Array C wäcsht in jeder Iteration an. Dies benötigt für jede Iteration ein neues, größeres Array und ein Kopieren des vorherigen. Matlab braucht dann nicht 640*480*50 doubles, sondern 640*480 + 640*480*2 + 640*480*3 + ...
640*480*50. Das macht 640*480*sum(1:50)*8 bytes = 3.13 GByte.
Lösungen:
1. Pre-allocation
2. A{1}, A{2}, ... statt A1, A2, ...
3. Oder besser Werte gleich ins C-Array schreiben:
Auf "clear('all')" würde ich mal verzichten - bei Bedarf findest Du dazu einiges im Forum.
Gruß, Jan
peter.krumov
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 12.06.2012, 16:08
Titel:
Vielen Dank für die Hinweise, jetzt läuft alles wie gewünscht!
Mit pre-allocation kannte ich mich noch gar nicht aus. So geht es natürlich viel besser.
Eine Frage habe ich noch: Kann ich mir innerhalb eines Contour-Plots die Koordinaten jeden Pixels anzeigen lassen?
Ich kenne das mittels 'imshow' und 'impixelinfo', nur leider braucht man dafür ja ein bmp-Bild. Wenn ich meinen Datenplot als bmp speichere, sind es danach natürlich viel mehr Pixel als Werte im Datensatz [640*480].
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.