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

Einlesen von mehreren Textdateien, 3D Matrix

 

vighter
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 21.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.10.2014, 01:29     Titel: Einlesen von mehreren Textdateien, 3D Matrix
  Antworten mit Zitat      
Hallo liebe Matlab Gemeinde,
ich kämpfe gerade mit einem Problem mit einer Menge an Messdaten. Die Daten eines Versuchs sind in einer Textdatei gespeichert, beim Einlesen kommt dann etwa eine 700x500 Matrix aus raus, quasi Pixel. Ich möchte jedoch 10 Versuche auf einmal einlesen um dann eine 3D Matrix zu erhalten, also 700x500x10.

Über die 10 Versuche möchte ich dann für jeden Pixel ein paar Werte wie StdAbweichung ect berechnen. Ist da mein Gedankengang richtig oder gibts da eine einfachere Möglichkeit die Daten einzulesen und zu bearbeiten? Bisher hab ich leider keinen Code rausbekommen der funktioniert.

Ich arbeite gerade an einem Code, den ich hier gefunden habe: http://www.matheplanet.com/default3.....iewtopic.php?topic=142924

Code:
files=dir('*.dat'); % Liste aller .dat-Dateien im Verzeichnis anlegen
kmax=numel(files); % Wie viele sind es?
data=cell(kmax,1); % Entsprechend grosse Cell anlegen
for k=1:kmax
    fid=fopen(files(k).name,'rt'); % k-te Datei oeffnen
    temp=textscan(fid,'%n %*n %*n %*n %n %*[^\n]',...
        'HeaderLines',1); % Erste Spalte einlesen, 2., 3. und 4.
    % ignorieren, 5. Spalte einlesen, Rest bis zum Zeilenende
    % ignorieren, 1. Zeile (Spaltenueberschriften) ignorieren
    fclose(fid); % k-te Datei wieder schliessen
    data{k,1}=[temp{:}]; % Dateiinhalt speichern
    % oder hier wie auch immer dirket auswerten
end
 
data{3}(10,2) % 3.Datei, Zeile 10, Spalte 2
 
% z.B. beide Spalten jeder Datei gegeneinander in einem Plot darstellen
hold all
for k=1:kmax
    plot(data{k}(:,1),data{k}(:,2));
end
hold off
 


Ich würd mich riesig freuen, wenn mir jemand einen Tipp geben kann, wie ich da am besten rangehe.
Private Nachricht senden Benutzer-Profile anzeigen


Alex4456
Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 17.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.10.2014, 09:20     Titel:
  Antworten mit Zitat      
Hallo,

es wäre gut, wenn du beschreibst was genau denn jetzt nicht funktioniert. Anscheinend hast du schon ein Code und das Einlesen der Daten sieht soweit richtig aus. Woran scheitert es?

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
vighter
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 21.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.10.2014, 10:53     Titel:
  Antworten mit Zitat      
Also wie gesagt habe ich den Code gefunden, der denke ich zu meinem Problem passt. Jedoch kann ich den Part hier denke ich weglassen, da alle Messdaten eingelesen werden sollen. Bin mir nur nicht sicher, was dann stattdessen dahin gehört:
Code:
%n %*n %*n %*n %n %*[^\n]',...
        'HeaderLines',1)
Private Nachricht senden Benutzer-Profile anzeigen
 
Alex4456
Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 17.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.10.2014, 11:23     Titel:
  Antworten mit Zitat      
Nun ein Blick in die Hilfe wäre sicherlich hilfreich: http://www.mathworks.de/help/matlab.....?searchHighlight=textscan

der zweite Parameter beschreibt das Format der eingelesen Dateien.
Je nach Anzahl der Spalten in deiner einzulesenden Datei musst du den String zu '%f%f%f...Anzahl derSpalten' setzen. HeaderLines kann man weglassen sofern du keine Beschreibung der Spalten in den Dateien hast.
Private Nachricht senden Benutzer-Profile anzeigen
 
vighter
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 21.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.10.2014, 13:50     Titel:
  Antworten mit Zitat      
Die Hilfe hab ich mir schon mehrmals angesehen, aber bin da noch nicht durchgestiegen. Heisst das, ich müsste für 700 Spalten 700x %f angeben? Ich habe manchmal auch Messdaten, die eine andere Anzahl an Spalten haben und würde das gerne unabhängig von einem festen Wert programmieren.
Private Nachricht senden Benutzer-Profile anzeigen
 
vighter
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 21.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.10.2014, 13:55     Titel:
  Antworten mit Zitat      
So, ich habe nun etwas herumgebastelt und mit dem Code hier funktioniert es ganz gut. is zwar etwas lahm aufgrund der Datenmenge und der Schleife, aber das ist nicht so wichtig.

Was jetzt noch ganz schön wäre, wenn mal eine kleinere Matrix eingelesen wird als die 481x751 Pixel, dass die mittig in der Matrix ausgerichtet wird, in der sie reingeschrieben wird, also in X. Hat da jemand eine Idee, wie ich das machen könnte? Im Code müsste ich das hier einbauen:
Code:
X(:,:,kk) = N;

Beispielsweise wenn die Messdaten nur 381x751 Pixel sind, dass die Matrix N in X um 50 Pixel verschoben wird.

Code:

dirname =uigetdir('F:\Matlab\Neuer Ordner'); % Ordner der Versuchsdaten eingeben,

files=dir(fullfile(dirname,'*.txt')); % Liste aller .txt-Dateien im Verzeichnis anlegen
kmax=numel(files); % Wie viele sind es?
sizeX = size(X); %größe der Matrix auslesen
n = sizeX(1); % Zeilen
m = sizeX(2); % Spalten

for kk=1:kmax
    filename = fullfile(dirname,files(kk).name);
    fid=fopen(filename,'rt'); % k-te Datei oeffnen
    comma2point_overwrite(filename);
    N = dlmread(filename,'\t'); % Messdaten eines Versuchs einlesen
    sizeN = size(N);
    shiftN = sizeX(1:2)-sizeN; % berechnet den Größenunterschied der Matrizen
    X(:,:,kk) = N;  % 3D Ergebnismatrix
    fclose(fid); % k-te Datei wieder schliessen
    % oder hier wie auch immer dirket auswerten
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
vighter
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 21.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.10.2014, 15:58     Titel:
  Antworten mit Zitat      
Hier ist mein Ergebnis, bisher funktioniert es soweit Smile

Code:

dirname =uigetdir('F:\Matlab\Neuer Ordner');

files=dir(fullfile(dirname,'*.txt')); % Liste aller .txt-Dateien im Verzeichnis anlegen
kmax=numel(files); % Wie viele sind es?
X = zeros(481,751,kmax); % 3D Matrix anlegen, 481x751 = Anzahl der Pixel
sizeX = size(X); % Größe der Matrix auslesen
n = sizeX(1); % Zeilen
m = sizeX(2); % Spalten

for kk=1:kmax
    filename = fullfile(dirname,files(kk).name);
    fid=fopen(filename,'rt'); % k-te Datei oeffnen
    comma2point_overwrite(filename); % überschreibt alle Kommas mit Punkt
    star2zero_overwrite(filename); % überschreibt alle Sternchen mit Nullen
    N = dlmread(filename,'\t');
    sizeN = size(N);% größe der Matrix auslesen
    shiftN = (sizeX(1:2)-sizeN)/2; % die Verschiebung beträgt die Hälfte der Differenz von X&N
    shift_floor=floor(shiftN); % abrunden
    shift_ceil=ceil(shiftN); % aufrunden
    X(1+shift_floor(1):sizeX-shift_ceil(1),1+shift_floor(2):sizeX(2)-shift_ceil(2),kk)=N;
    % fügt die Messdaten zentriert in die Ergebnismatrix ein
    fclose(fid); % k-te Datei wieder schliessen
end
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 - 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.