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

readtable bei großen datenmengen

 

InfoIngo
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 16.12.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.12.2016, 16:30     Titel: readtable bei großen datenmengen
  Antworten mit Zitat      
Hallo,

ich habe große Datenmengen die in einer .txt Datei so vorliegen:

Zitat:

Achse 1
Mittenposition [N] -5000,000
Geschwindigkeit [N/s] 450,000
Amplitude [N] 3000,000
Frequenz [Hz] 2,000
Phase 0,000
Aufblenden Lastwechsel 20
Kurvenform Sinus
Lastwechsel 8000

Reglerparameter Achse 1
Folgeregler
Weg Kraft
Messbereich 100 %
P 1,000 P 0,250
I 0,000 I 0,250

Spitzenwertregler
Weg Kraft
P (Mitte) 0,100 P (Mitte) 0,250
I (Mitte) 0,100 I (Mitte) 0,150
P (Ampl) 0,100 P (Ampl) 0,100
I (Ampl) 0,100 I (Ampl) 0,100


Grenzen
Min Max
Kraft [N] -9000,000 -1000,000
Weg [mm] -6,000 6,000


Weg_Time [s] Weg [mm] Kraft_Time [s] Kraft [N] Extern 1_Time [s] Extern 1 [V] Extern 2_Time [s] Extern 2 [V] Weg_MIN_Periode Weg_MIN [mm] Weg_MAX_Periode Weg_MAX [mm] Kraft_MIN_Periode Kraft_MIN [N] Kraft_MAX_Periode Kraft_MAX [N] Extern 1_MIN_Periode Extern 1_MIN [V] Extern 1_MAX_Periode Extern 1_MAX [V] Extern 2_MIN_Periode Extern 2_MIN [V] Extern 2_MAX_Periode Extern 2_MAX [V]
3,1675 3,27 3,1675 -4989,0 3,1675 2,23 3,1675 1,68 0 3,27 0 3,27 0 -5018,5 0 -4989,0 0 2,22 0 2,26 0 1,86 0 1,87
3,1705 3,27 3,1705 -4991,0 3,1705 2,23 3,1705 1,67 0 3,27 0 3,27 0 -5022,1 0 -5010,4 0 2,22 0 2,26 0 1,86 0 1,87
3,1735 3,27 3,1735 -4991,6 3,1735 2,22 3,1735 1,67 0 3,27 0 3,28 0 -5018,5 0 -4940,1 0 2,22 0 2,26 0 1,85 0 1,87
3,1765 3,27 3,1765 -4992,9 3,1765 2,24 3,1765 1,67 0 3,27 0 3,28 0 -4983,9 0 -4866,0 0 2,22 0 2,26 0 1,83 0 1,86
3,1795 3,27 3,1795 -4993,2 3,1795 2,24 3,1795 1,67 0 3,27 0 3,28 0 -4966,7 0 -4807,4 0 2,22 0 2,26 0 1,81 0 1,86



Tab als Trennzeichen, die Dezimaltrennstelle ist ein Komma.
Diese Datein können schnell über 6GB groß werden und überfordern beim einfachen einlesen schon direkt den PC mit folgendem Befehl:

t =readtable('a.txt');

Ich benötige ab Zeile 34 die Spalten: 1,2,4,6 und 8 als "double".
Bisher habe ich einen Weg, der mir und auch sonst keinem gefallen wird - und auch mehrere Stunden braucht. Ich stelle ihn gerne vor Smile
Readtable liest irgendwie automatisch ab Zeile 34 ein...
Dadurch entsteht eine beliebig lange x 24 spaltige "table" Workspace Datei.
In diesem fall eine knapp 40 Millionen * 24 Matrix.

Zitat:

t=readtable('a.txt');
laenge=39228000;
zeit = t(1:laenge,1);
weg = t(1:laenge,2);
kraft = t(1:laenge,4);
v1 = t(1:laenge,6);
v2 = t(1:laenge,Cool;
clear t;
zeit=table2array(zeit);
zeit=strrep(zeit, ',', '.');
zeit=str2double(zeit);
weg=table2array(weg);
weg=strrep(weg, ',', '.');
weg=str2double(weg);
kraft=table2array(kraft);
kraft=strrep(kraft, ',', '.');
kraft=str2double(kraft);
v1=table2array(v1);
v1=strrep(v1, ',', '.');
v1=str2double(v1);
v2=table2array(v2);
v2=strrep(v2, ',', '.');
v2=str2double(v2);



Zwischendrinn lösche ich die unnötigen Sachen aus dem Workspace, da mein Speicher immer überlastet ist. - Das Ganze führe ich als Script aus, dort dauert es deutlich länger, als wenn ich alles in die Konsole eintippe (jeden Schritt einzeln), jedoch läuft es dann automatisiert...
Ich gehe davon aus, dass ich hier wie ein Elefant im Porzellanladen agiere und ersuche mir Hilfe Smile

Ansonsten lass ich diese Sachen dann wohl oder übel über Nacht laufen...

Verbesserung sehe ich im Einlesen - wenn ich nur 8 Spalten brauche muss ich eigentlich nicht alle 24 einlesen.
Die konvertierung vom typ "cell" zum typ "double" über den Befehl (ersetze alle "," durch ".") ist sehr zeitintensiv.


#Edit - Version R2016b#

DANKE im Voraus für eure Mühe!
Gruß Ingo

Zuletzt bearbeitet von InfoIngo am 16.12.2016, 17:35, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.12.2016, 17:30     Titel:
  Antworten mit Zitat      
Hallo,

welche MATLAB-Version hast du? Ab R2014b würde sich datastore anbieten. Dort kannst du einfach die benötigten Spalten auswählen statt alles einzulesen und dann einen großen Teil wieder wegzuwerfen.
Das geht davon abgesehen auch bei readtable, wenn du 'Format' angibst und '%*f' für zu überspringende Spalten verwendest.

Was die Kommata als Dezimaltrennzeichen angeht, würde ich die Datei entsprechend vorverarbeiten, siehe z.B. hier:
https://de.mathworks.com/matlabcent.....-with-comma-decimal-point

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

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 16.12.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.12.2016, 17:45     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke für deine Antwort!

Zitat:

b = readtable('a.txt','%s,%*f,%*f,%*f,%*f,%*f,%*f,%*f,%*f,%*f,%*f,%*f,%*f,%*f,%*f,%*f,%*f,%*f,%*f,%*f,%*f,%*f,%*f,%*f');
Error using readtable (line 197)
Wrong number of arguments.


Ich hab auch keine Ahnung wie ich Matlab das Format da passend einverleibe, so jedenfalls noch nicht.

Zitat:

>> b = readtable('a.txt','%s %*f %*f %*f %*f %*f %*f %*f %*f %*f %*f %*f %*f %*f %*f %*f %*f %*f %*f %*f %*f %*f %*f %*f');
Error using readtable (line 197)
Wrong number of arguments.


So auch nicht Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

die zweite Version sieht besser aus, da fehlt nur 'Format'.

Bitte auch in die Doku schauen. Die Syntax im Beispiel "Create and Format Table from Text File" ist genau das, was du brauchst.

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

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 16.12.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.01.2017, 16:47     Titel:
  Antworten mit Zitat      
Um es abzuschließen, hier meine Lösung die ich dann hatte.
Danke an Harald!


Zitat:

fn='DATEINAME DER DATEI.txt';

file = memmapfile(fn,'Writable',true);
comma = uint8(',');
point = uint8('.');
file.Data(( file.Data==comma)' ) = point;

ds = tabularTextDatastore(fn,'TreatAsMissing','NA','SelectedVariableNames',{'Weg_Time_s_'});
wz=table2array(readall(ds));

ds = tabularTextDatastore(fn,'TreatAsMissing','NA','SelectedVariableNames',{'Weg_mm_'});
w=table2array(readall(ds));


Ich überschreibe damit die original Datei und mache aus "," je ein "."

Anschließend wird verarbeitet.
Gibt man in die Konsole nur ds (mein variablenname für tabularTextDatastore) ein kann man sich die Spalten die zur Auswahl stehen ansehen und diese dann vorauswählen.

Mit dieser Methode bin ich bisher sehr effizient unterwegs.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.01.2017, 17:00     Titel:
  Antworten mit Zitat      
Hallo,

mit preview(ds) kannst du dir auch schön einen Überblick verschaffen.

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.