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

Mehrere Matrizen in eine Variable laden, und weiterrechnen

 

Paet0r
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 13.08.10
Wohnort: Dresden
Version: ---
     Beitrag Verfasst am: 13.08.2010, 14:41     Titel: Mehrere Matrizen in eine Variable laden, und weiterrechnen
  Antworten mit Zitat      
Hallo Leute )
Bin neu hier, und habe ne ganz dringende Frage/Bitte:

Ich soll ein Programm schreiben, welches mehrere Daten aus einem Verzeichnis laden soll,
die von 3 Variablen und dem Pfad abhängen sollen, so dass man z.B. nur eingeben muss
Code:

function(1:2, 13:48, 0:2, 'directory')
 

und man erhält die gewünschten Daten zusammen in eine Matrix.
Das sind sehr große Matrizen, mit gleicher Spaltenanzahl aber manchmal unterschiedlicher Zeilenanzahl.
Da ich der Programmierung noch nicht sonderlich mächtig bin,
habe ich erst ein Script geschrieben ( mit elseif Befehlen), welches
1. nur einzelne Dateien laden kann,
2. die nicht in eine Matrix schreibt, und
3. ich nicht weiß, wie ich den Dateipfad da eingeben muss =))

Bitte verzweifelt um Hilfe =)
Danke im Vorraus
Paet0r )
Private Nachricht senden Benutzer-Profile anzeigen


Napoleon
Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 22.07.10
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 13.08.2010, 15:09     Titel:
  Antworten mit Zitat      
Hallo,

also mir ist noch nicht klar was du genau haben möchtest.
wie liegen die daten vor? als textdatei, csv...? du kannst vlt eine datei hochladen, oder zumindest sagen wie die werte aussehen (durch komma getrennt, leerzeichen....).

und was bedeuten die zahlen : 1:2, 13:48, 0:2?

vlt kann dir dann jemand helfen.

viel erfolg
_________________

Die Hartnäckigen gewinnen die Schlachten.
Private Nachricht senden Benutzer-Profile anzeigen
 
Paet0r
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 13.08.10
Wohnort: Dresden
Version: ---
     Beitrag Verfasst am: 13.08.2010, 15:35     Titel:
  Antworten mit Zitat      
Hi )
Also die Dateien liegen als "einfache Dateien vor" (ich glaub das hieß ASCII )
Habe mal eine angehängt.
Davon gibt es ganz viele. Diese haben 3 werte
1: den Wert nach Phs:01-03 ;
2: den Wert danach: _00001-00048 und
3: den Wert danach: _00001_00002

und die sind in Ordner, die sich in verschiedenen Pfaden befinden.

Ich brächte ein Script/eine Funktion,
die bei Benutzung durch die Eingabe der Variablen von 01-03 ; 00001-00048 und 00001 bis 00002
sowie des Pfades,
die gewünschten Dateien läd, und sie in eine Große Matrix, wo die ausgewählten Dateien alle drin sind in den Workspace speichert, sodass man damit weiterrechnen kann.

(und mit 1, 13:48, 0:1 als Beispiel meinte ich halt, dass alle Dateien phs01_00013bis48_00001 (+ der gewünschten Directory) geladen werden sollen und in eine atrix geschrieben werden sollen )

Klingt wohl nach ziemlich viel, dachte aber, dass mir einfach ein bestimmter Befehl fehlt. Habe es auch schon mit for-schleifen ausprobiert etc., klappt aber alles nicht.

Bitte ganz dringend um eure Hilfe =)

phs03_00023_00001.m
 Beschreibung:

Download
 Dateiname:  phs03_00023_00001.m
 Dateigröße:  3.26 MB
 Heruntergeladen:  472 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Paet0r
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 13.08.10
Wohnort: Dresden
Version: ---
     Beitrag Verfasst am: 13.08.2010, 17:35     Titel:
  Antworten mit Zitat      
oder ist es evtl. unmöglich, was ich mir da vorgenommen habe? =)
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 14.08.2010, 11:25     Titel:
  Antworten mit Zitat      
Hallo,

probier mal diesen code ob es funktioniert.
die funktion sieht statt:
function(1:2, 13:48, 0:2, 'directory')

so aus:
function(1,2, 13,48,0,2, 'directory')

hab einfach die interessierenden zahlen durch komma getrennt.
pfad ist der ordner wo deine m.files stehen.
Code:

function M = myfunc(a,b,c,d,e,f,pfad)

string=sprintf('phs0[%d-%d]_000[%d-%d][%d-%d]_0000[%d-%d].m',...
a,b,fix(c/10),fix(d/10),mod(c,10),mod(d,10),e,f);
list=dir([pfad,'\*.m']);
names={list.name};

X=regexp(names,string,'match');
ind=cellfun('isempty',X);
X=X(~ind);
len=length(X);

for ii=1:1:len
    M{ii}=dlmread(fullfile(pfad,char(X{ii})));
end
 



aufruf der Funktion zb: M=myfunc(1,2,12,48,1,3,'pfad')
deine ergebnisse stehen dann in M{1},M{2}......

viel glück
_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
Paet0r
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 13.08.10
Wohnort: Dresden
Version: ---
     Beitrag Verfasst am: 14.08.2010, 17:26     Titel:
  Antworten mit Zitat      
Boar!
Hab vielen, vielen Dank! Du rettest mir das Leben =)
Werds gleich einmal ausprobieren!

Gruß
Paet0r
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 14.08.2010, 19:04     Titel:
  Antworten mit Zitat      
sag das wenn es funktioniert ;)
_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
Paet0r
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 13.08.10
Wohnort: Dresden
Version: ---
     Beitrag Verfasst am: 15.08.2010, 16:56     Titel:
  Antworten mit Zitat      
Hiho =)
Also das Script scheint zu funktionieren =)
An dieser Stelle nochmal vielen Dank )
Aber da gibts noch ein paar Kleinigkeiten.
Die Funktione speichert die geladenen Matrizen in den Workspace als M, aber um damit rechnen zu können, muss ich
Code:

als Beispiel eingeben.
Außerdem sind die Matrizen(M{1,1} etc.) nicht so wie in der Datei, eine 7 x "viel" Matrix, sondern hat noch eine neue, erste, Spalte, die nur aus 0 besteht, also ist eine 8 x "viel" Matrix geworden.
Kann man das wegbekommen irgendwie? =)
Die nächste Frage wäre, ob ich diese Matrizen M{i,i} auch gleich alle in eine Variable speichern kann, also so, dass alle Werte in einer Matrix untereinander weg stehen.
Ich hab mich über den Befehl
Code:

belesen, also z.B.
Code:
dlmwrite(M{1,1},M{1,2}, ' ')

Würde es damit gehen? Habs eig. so verstanden, dass er einen bestehenden file mit einer weiteren Matrix erweitert, und diese dann abspeichert. Würde es auch so gehen, dass dieser Befehl im vorhergegangenen Script enthalten ist, und alle Matrizen (ohne die erste Nullspalte =) ) in eine Variable gespeichert werden?

Eine Antwort wäre abermals lebensrettend =)
Danke im Vorraus )
Paet0r
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 16.08.2010, 08:45     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:

Die nächste Frage wäre, ob ich diese Matrizen M{i,i} auch gleich alle in eine Variable speichern kann, also so, dass alle Werte in einer Matrix untereinander weg stehen.


ich weiss nicht was daran gut sein kann, aber du weisst es
Code:

Variable=cell2mat(M')
 


also ich greif auf die matroze mit M{1}....
und das mit der zuzätzlichen spalte verstehe ich auch nicht, kann sein dass bei deinen dateieen irgendeine nuller spalte versteckt ist ;) ansonsten:
Code:

Variable(:,1)=[]
 


gruss
_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
Paet0r
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 13.08.10
Wohnort: Dresden
Version: ---
     Beitrag Verfasst am: 17.08.2010, 17:04     Titel:
  Antworten mit Zitat      
Und abermals, viele dank =)
Musste zwar ein wenig was umschreiben, aber es klappt einwandfrei =)
Bin mir zwar nicht ganz sicher, ob ich alle Befehle richtig verstanden habe, aber so sieht das script jetzt aus:

Code:
function [M] = fc(a,b,c,d,e,f,pfad)
%Function to load any amount of files of target direction
%with the name like: phs0a-b_000c-d_0000e-f

%Using the variables of the function to define the file name
%fix and mod are used to round the variables c and d, so if u use
%Numbers from 1 to 9, they're written as 01 -09
string = sprintf('phs0[%d-%d]_000[%d-%d][%d-%d]_0000[%d-%d]',...
a,b,fix(c/10),fix(d/10),mod(c,10),mod(d,10),e,f);

%defining list as the direction u've chosen by typing the variables in Octave-command-window
list=dir([pfad,'\*']);
%defining names as a combination of list and names
names={list.name};

%regexp is used to check names with the string above and save all the matched ones in X
X=regexp(names,string,'match'); #
%returns all empty cells of X
ind=cellfun('isempty',X);
%~means "not", or in our case "without"
%so X now stands for all the files, which could be identified through our function(insert)
X=X(~ind);
%returns the length of all this files in a vector
len=length(X);
%for-loop to read all the files defined through the function-insert
%in reads all the files which matched through regexp and identified by cellfun
for ii=1:1:len
  C{ii}=dlmread(fullfile(pfad,char(X{ii})));
 %due to an unknown reason, it returns the files with an additional 0-vector as first, this is needet to delete it
  C{ii}(:,1)=[]
 %all the matrices are saved in workspace one by one,(in a cell), this is needet to bring em all in one matrix(double)
 M = cell2mat(C')
 
  end


Und er gibt mir ne riesengroße Matrix aus.

Hab ich die comments richtig geschrieben? Oder gibts da noch Verständnisfehler?

Mfg
Paet0r
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 18.08.2010, 08:06     Titel:
  Antworten mit Zitat      
Hallo,
Zitat:

%fix and mod are used to round the variables c and d, so if u use
%Numbers from 1 to 9, they're written as 01 -09


das es so geworden ist war nicht beabsichtigt, es ist aber gut so Wink
der grund warum ich es getan habe war zahlen wie 23 zu trennen 2 und 3.
wie du in der sprintf funktion siehst gibts 8mal %d, während die funktion nur 6 zahlen benötigt. aber wie ich sagte an deiner erklärung sollte ich eigentlich auch denken, hat sich aber von alleine erledigt.
Zitat:

%returns all empty cells of X
ind=cellfun('isempty',X);


returns the indicies of the empty cells.
Code:

X=X(~ind); % delete the empty cells

 

Zitat:

%returns the length of all this files in a vector
len=length(X);


in this case the number of the files identified.

Zitat:

%due to an unknown reason, it returns the files with an additional 0-vector as first, this is needet to delete it


manchmal ist es gut einfach ehrlich zu sein Wink.

ansonsten meine letze anmerkung:
Code:

% das ist ein Kommentar
%das ist kein Kommentar
 


gruss
_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
Paet0r
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 13.08.10
Wohnort: Dresden
Version: ---
     Beitrag Verfasst am: 18.08.2010, 14:50     Titel:
  Antworten mit Zitat      
=)
Danke, habs korrigiert )
Gruß
Paet0r
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.