|
|
je eine Spalte aus vielen Matrizen extrahieren und speichern |
|
punsel |
Forum-Anfänger
|
|
Beiträge: 27
|
|
|
|
Anmeldedatum: 23.01.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 24.01.2008, 13:41
Titel: je eine Spalte aus vielen Matrizen extrahieren und speichern
|
|
|
|
|
Hallo,
ich habe folgendes Problem:
Ich habe eine ganze Reihe von Matrizen mit fortlaufendem Index (File0001, File0002, ...), die ich in den Workspace einlese.
Nun moechte ich aus jeder dieser Matrizen mehrmals einen bestimmten Teil einer spalte auslesen. Danach moechte ich diese Spalten unterteilen und die einzelnen Abschnitte ebenfalls speichern.
ich hatte mich bereits an einer "for" Schleife versucht, bin aber da nicht weitergekommen.
Ich muss dazu sagen, dass ich so gut wie keine Erfahrung mit Schleifen und wenig Erfahrung mit MatLab habe...
Hier ein Beispiel:
File0001 = [1 1 1 1 1 1;2 2 2 2 2 2;3 3 3 3 3 3;4 4 4 4 4 4]
File0002 = [5 5 5 5 5 5;6 6 6 6 6 6;7 7 7 7 7 7;8 8 8 8 8 8]
Ich moechte jeweils die erste Spalte auslesen (und abspeichern) - also sollte z.b. herauskommen:
a = [1;2;3;4] % die erste Spalte von File0001 soll als "a" abgespeichert
% werden (das Speichern ist nicht unbedingt noetig)
b = [5;6;7;8] % die erste Spalte von File0002 soll als "b" abgespeichert
% werden (das Speichern ist nicht unbedingt noetig)
Nun moechte ich a und b in gleich grosse Abschnitte unterteilen (in meinemn richtigen Fall sollen diese Abschnitte immer 76 Eintraege lang sein). Diese Abschnitte sollen einzeln unter einem eigenen Namen abgespeichert werden. Es soll also herauskommen:
a1 = [1;2] % der erste Abschnitt aus a soll als a1 abgespeichert
werden
a2 = [3;4]
b1 = [5;6]
b2 = [7;8]
Ich hoffe, ihr koennt mir weiterhelfen... ich bin da an meine Grenzen gestossen und bin schon fast soweit, das ganze fuer 18*200 Matrizen ohne Schleifen auszuschreiben...
Vielen Dank schonmal fuer's lesen
|
|
|
|
|
steve |
Ehrenmitglied
|
|
Beiträge: 2.029
|
|
|
|
Anmeldedatum: 03.09.07
|
|
|
|
Wohnort: Wien
|
|
|
|
Version: R2024a
|
|
|
|
|
|
Verfasst am: 24.01.2008, 15:02
Titel:
|
|
Hallo punsel,
zu deiner ersten Frage:
Auf bestimmte Zeilen oder Spalten von Matrizen zugreifen, ist relativ einfach zu handhaben:
Zitat: |
File0001(:,1) % gibt dir die erste Spalte von File0001 aus
File0001(1,:) % gibt dir die erste Zeile von File0001 aus
File0001(2:3,:) % gibt dir eine Matrix bestehend aus der 2. & 3. Zeile von File0001 aus
|
Gruß
Alex
_________________
>> I told me to.
____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
|
|
|
nschlange |
Ehrenmitglied
|
|
Beiträge: 1.320
|
|
|
|
Anmeldedatum: 06.09.07
|
|
|
|
Wohnort: NRW
|
|
|
|
Version: R2007b
|
|
|
|
|
|
Verfasst am: 24.01.2008, 15:05
Titel:
|
|
|
|
punsel |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 27
|
|
|
|
Anmeldedatum: 23.01.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 24.01.2008, 15:09
Titel:
|
|
Hei Alex,
danke fuer die Antwort.
Das habe ich allerdings schon herausgefunden.
Auch die weiteren Schritte kann ich ausfuehren. Mein Problem ist eher eine Art Stapelverarbeitung.
Ich habe halt eine Menge recht grosser Matrizen und ich muesste sehr viele einzelne Schritte nacheinander machen. Diese Schritte moechte ich aber nicht alle einzeln aufschreiben, weil mich das Tage kosten wuerde und ich bei neuen Datensaetzen alles wieder per Hand umschreiben muesste... Ich suche also nach einer Moeglichkeit, den Vorgang zu automatisieren. Ich hatte gehofft, man koennte so etwas mit "for" Schleifen machen...?
Ich bin weiterhin fuer jede Hilfe dankbar...
|
|
|
steve |
Ehrenmitglied
|
|
Beiträge: 2.029
|
|
|
|
Anmeldedatum: 03.09.07
|
|
|
|
Wohnort: Wien
|
|
|
|
Version: R2024a
|
|
|
|
|
|
Verfasst am: 24.01.2008, 15:14
Titel:
|
|
|
|
punsel |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 27
|
|
|
|
Anmeldedatum: 23.01.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 24.01.2008, 15:25
Titel:
|
|
|
|
|
Hei nschlange,
auch dir danke fuer die Antwort.
Die Daten sind Matrizen mit den Dimensionen 4851 x 9 und kommen von einer externen Anwendung. Ich lese die Matrizen als ascii-Daten ein:
d=dir('F:\Lader2007\Turbulenz\*.txt') % alle entsprechenden Daten werden in
% d zusammengefasst
for i=1:length(d)
eval(['load' d(i).name ' -ascii'])
end % alle in d erfassten Daten werden
% geladen
Dann habe ich also die Matrizen im Workspace. Das ist, wo der ganze Spass anfaengt
Nun moechte ich eine Spalte jeder Matrix extrahieren. Ich koennte das also so schreiben:
u01=File0001(77:152,3) % extrahieren der Eintraege 77 bis 152 aus der
% dritten Spalte
Ich moechte aber aus der gleichen Spalte oefter Eintraege extrahieren, also muesste ich diesen Schritt haeufiger, aber mit unterschiedlichen Eintraegen in den Klammern ausfuehren:
u02=File0001(153:228,3) % extrahieren der Eintraege 153 bis 228 aus der
% dritten Spalte
u03=File0001(229:304,3) % extrahieren der Eintraege 229 bis 304 aus der
% dritten Spalte
usw...
Aber weil das noch nicht genug ist, moechte ich nun das ganze mit sehr vielen Matrizen machen (Namen der Matrizen: File0001, File0002, File0003, ...).
Danach werde ich dann mit den extrahierten Daten weiterrechnen. Das heisst, ich muss die einzelnen Abschnitte der Spalten speichern (in meinem Beispiel sind das also u01, u02, u03, ...).
Die Namen der Variablen muessen uebrigens nicht so lauten. Jeder Name ist ok. Nur die urspruenglichen Daten (File0001, ...) moechte ich nicht umbenennen.
Ich hoffe, das ist klar genug geschrieben und du verstehst mein Problem?
EDIT by Martin: Herzlichen Glückwunsch zu 2.000sten Beitrag
|
|
|
punsel |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 27
|
|
|
|
Anmeldedatum: 23.01.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 24.01.2008, 15:34
Titel:
|
|
Hei Alex,
da brauche ich ein bisschen laenger, das nachzuvollziehen...
Auf die 76 komme ich, weil die Daten aus einem Grid kommen, dessen eine Seite aus 76 Datenpunkte besteht
|
|
|
nschlange |
Ehrenmitglied
|
|
Beiträge: 1.320
|
|
|
|
Anmeldedatum: 06.09.07
|
|
|
|
Wohnort: NRW
|
|
|
|
Version: R2007b
|
|
|
|
|
|
Verfasst am: 24.01.2008, 17:34
Titel:
|
|
punsel hat Folgendes geschrieben: |
u01=File0001(77:152,3) % extrahieren der Eintraege 77 bis 152 aus der
% dritten Spalte
Ich moechte aber aus der gleichen Spalte oefter Eintraege extrahieren, also muesste ich diesen Schritt haeufiger, aber mit unterschiedlichen Eintraegen in den Klammern ausfuehren:
u02=File0001(153:228,3) % extrahieren der Eintraege 153 bis 228 aus der
% dritten Spalte
u03=File0001(229:304,3) % extrahieren der Eintraege 229 bis 304 aus der
% dritten Spalte
|
Woher/wann weißt Du, welche Einträge Du brauchst?
Evtl. kannst Du die Indizes der benötigten Elemente für jede Variable
File00** speichern, und dann in einer for-Schleife über alle File00**
iterieren und die entsprechenden Elemente extrahieren.
_________________
Viele Grüße
nschlange
"Chuck Norris ejakuliert fluessigen Stahl!"
|
|
|
Michaela |
Forum-Century
|
|
Beiträge: 239
|
|
|
|
Anmeldedatum: 12.07.07
|
|
|
|
Wohnort: ---
|
|
|
|
Version: bis 2007b
|
|
|
|
|
|
Verfasst am: 24.01.2008, 19:03
Titel:
|
|
|
|
|
Hallo punsel,
mit welchem Programm willst Du denn die endgültige Auswertung der Daten durchführen? Mit Matlab?
Dann wäre es evtl. günstiger statt vieler einzelner Files gleich die variabelnstruktur von matlab zu nutzen und vielleicht alle Daten aus einer Datei in einem struct oder cell array abzuspeichern.
zum beispiel sowas
Dann kannst Du dir eine funktion schreiben, der du A übergibst und die dann die einzelnen Vektoren rausholt zB
In dem cell A{jj}.extract stehen nun alle Einzelvektoren.
Der Vorteil dieses Vorgehens: dadurch dass alles in einer Variablen ist, kannst Du auch später noch Herkunft und Herstellung der Daten nachvollziehen, auch sparst Du dir viele mühevolle Einleseroutinen.
Falls Du die Daten extern weiterverarbeiten möchtest, dann solltest Du dir überlegen ob Du nicht auf eine Sprache umsteigst, die für file-I/O gedacht ist. also zB perl phython etc. Das ist einfacher und schneller als mit matlab, vor allem da du dich in matlab ja auch einarbeiten musst. FAlls Du nur matlab hast: eine Umsetzung ist sicherlich möglich, aber eben nicht so elegant und schnell.
_________________
---------------------------------------------------------------
Leider habe ich daheim zwar Internet aber kein Matlab - daher sind alle Syntaxbeispiele circa Angaben.....
|
|
|
|
|
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 - 2024
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.
|
|