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

Importdata-nur bestimmte Spalten auslesen

 

Linda
Forum-Anfänger

Forum-Anfänger


Beiträge: 40
Anmeldedatum: 26.06.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.12.2017, 11:28     Titel: Importdata-nur bestimmte Spalten auslesen
  Antworten mit Zitat      
Ich habe mehrere .dat-Dateien, aus denen ich jeweils nur bestimmte Spalten benötige. Zum Beispiel Spalte [1 2 27 54]. Über importdata ist das Einlesen der ganzen Datei in eine Matrix kein Problem. Ist es aber möglich lediglich die benötigten Spalten zu extrahieren, ohne den Rest vorher speichern zu müssen?

Da es sich um sehr große Datenmengen handelt, kann ich (Matlab) nämlich nicht alle hochladen und dann sortieren.

Danke.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.12.2017, 11:35     Titel:
  Antworten mit Zitat      
Hallo,

im Import Tool (Datei rechtsklicken --> Import Data) kannst du nicht zusammenhängende Datenteile auswählen.

Auch andere Funktionen ( textscan , readtable , datastore ) bieten entsprechende Möglichkeiten.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Linda
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 40
Anmeldedatum: 26.06.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.12.2017, 11:41     Titel:
  Antworten mit Zitat      
Okay, ich möchte das jedoch gerne in einen Code integriert haben und nicht händisch auswählen müssen.

Ich hab folgenden Code, funktioniert auch wunderbar, aber eben nur bis zu einer gewissen Anzahl an Files, da sonst das Laden von fid zum einen sehr lang dauert, zum anderen aber auch zu groß wird.

Code:

for i = 1:length(Filenames)
   
fid(:,:,1)  = importdata(Filenames{i});
A  (:,:,i)   = fid(:,[1 2 27 54],1);

end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.12.2017, 13:04     Titel:
  Antworten mit Zitat      
Hallo,

mit importdata geht das halt nun mal nicht.
Zum einen kannst du bei Import Tool auch ein Skript oder eine Funktion generieren, zum anderen habe ich dir ja alternative Befehle genannt. Wenn du eine Sammlung von Dateien hast, bietet sich datastore an.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Linda
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 40
Anmeldedatum: 26.06.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.12.2017, 15:28     Titel:
  Antworten mit Zitat      
Okay, danke. Smile

Hast du auch einen Tipp bzgl. der Geschwindigkeit? Also generell beim Einlesen von .dat-Dateien. Wie kann ich das Einlesen beschleunigen (angewendet an meinem oben genannten Beispiel)?

Infos zu den Dateien: 120 000 Zeilen und 240 Spalten und davon hab ich etwa 400 Files. Alles in eine 3D-Matrix funktioniert nicht (oder doch?), daher wähle ich die benötigten Spalten auch vorher aus.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.12.2017, 15:53     Titel:
  Antworten mit Zitat      
Hallo,

wenn du 4 Spalten importierst, dann sind das
120000 * 4 * 400 * 8 Bytes = 1.5 GB
(ich gehe davon aus, dass es ausschließlich numerische Daten sind)

Wenn du einigermaßen viel RAM hast, passt das in den Speicher und du kannst auch noch vernünftig damit arbeiten.

Auf einem guten Rechner würde ich größenordnungsmäßig ein paar Minuten für das Importieren der Daten rechnen.

Wenn du dieselben Daten mehrfach brauchst, dann nach dem ersten Mal in eine .mat-Datei speichern.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Linda
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 40
Anmeldedatum: 26.06.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.12.2017, 14:41     Titel:
  Antworten mit Zitat      
Eventuell hast du bei meinem folgenden Problem einen Ratschlag:

Ich suche aus den 400 Files immer die Maxima und speichere diese dann in 3D-Matrizen, also die dritte Dimension ist die Anzahl der Files. Es bricht immer bei 110 ab mit der Fehlermeldung "Index exceeds Matrix Dimension". Ich versteh nicht, warum, die Matrix selbst ist nur 6x6 groß, also kann es ja eigentlich nicht an der Größe selbst liegen.
Hast Du eine Idee?

Hier noch ein Teil des Codes:
Code:
 
 for i = 1:length(Filenames)
        for x=1:x_length %(Spaltenanzahl)
            fid(:,:,1)  = importdata(Filenames{i});
           
            A  (:,:,1)   = fid(:,num1,1); %num1=Spaltenauswahl, bspw. [1 2 3 4]
           
            [M,I] = max(A(:,x));
            Maxi(x,:,i) = A(I,:,1);
           
            [M,I] = min(A(:,x));
            Mini(x,:,i) = A(I,:,1);
            fid = [];
            A = [];
        end
       
    end
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.12.2017, 16:05     Titel:
  Antworten mit Zitat      
Hallo,

in welcher Zeile tritt das Problem genau auf? Reproduzierbare Beispiele sind generell besser.

Was mir auffällt:
Code:
 [M,I] = max(A(:,x));
            Maxi(x,:,i) = A(I,:,1);


Du mischst 2D und 3D - Indizierung für A. Das kann Probleme verursachen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Linda
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 40
Anmeldedatum: 26.06.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.12.2017, 16:13     Titel:
  Antworten mit Zitat      
Danke für Deine Antwort!!

Leider gibt mir Matlab keine Zeilenangabe an und das debugging ist bei so vielen Durchläufen schwierig. Ich sehe aber im Workspace, dass eben nur 110 Files in der dritten Dimension geladen worden sind.

In wieweit ist das problematisch?
Mein Problem ist hierbei, dass ich das nicht zu vermeiden gewusst habe. Ich brauche ja die Zeile bei der das Maximum vorkommt, um es daraufhin speichern zu können. Möchte diese 3D-Form aber, da ich dann besser weiter arbeiten kann. Hm.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.12.2017, 16:29     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Leider gibt mir Matlab keine Zeilenangabe an

Das sollte der Fall sein, sofern du den Run-Button im Editor nutzt oder den Code vom Command Window aus aufrufst.

Zitat:
und das debugging ist bei so vielen Durchläufen schwierig.

Dann gib mal ein
Code:

und lass das dann nochmal laufen.

Zitat:
In wieweit ist das problematisch?

Dass es möglicherweise nicht das macht, was du dir erwartest.

Grüße,
Harald
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.