Textscan R2012a mehr als doppelt so schnell wie R2013b
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 12.01.2014, 17:31
Titel: Textscan R2012a mehr als doppelt so schnell wie R2013b
Hi,
ich habe einen Laptop (4 GB RAM) sowie einen deutlich leistungsstärkeren PC (16 GB RAM, i5, ...).
Ich hatte zunächst auf meinem Laptop nur R2012a und auf dem PC bereits R2013b installiert. Bei der Anwendung von Textscan fiel mir auf, dass das Einlesen der 1,9 GB Daten beim Laptop deutlich schneller beendet ist.
Ich hab nun die Zeiten verglichen:
Laptop:
R2012a: 37 bis 45 s
R2013b: 121 s
PC:
R2013b: 97 s
Wieso ist der Befehl mittlerweile so abnormal langsam geworden?
kannst du ein Beispiel zur Verfügung stellen, anhanddessen sich das reproduzieren lässt?
So eine Frage ist auch wie gemacht für den Technischen Support von MathWorks. Sollte es sich um ein Problem im Produkt handeln, kann dem so nachgegangen bzw. das Problem behoben werden.
Grüße,
Harald
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 14.01.2014, 19:01
Titel:
Hi,
ja, ein Beispiel kann ich zur Verfügung stellen. Das Messwertfile hab ich mit 7-Zip komprimiert, da es sonst sehr groß wäre.
Download über:
http://lix.in/-e324e6 (Download eines 7-Zip Files von meinem persönlichen Webspace). 7-Zip Files sind hier wohl nicht zugelassen. Ist 48 MB groß (entpackt über 1 GB).
% Datei auswählen und öffnen [a, b]=uigetfile({'*.KEW','All KEW files'; ...
'*.*','All Files' },'Please select KEW file'); if a == 0; return; end tic; fid=fopen([b,a],'r'); %fid=fopen('52-SD024.KEW','r');
% Beschriftung einlesen und erstellen
fmat=['%s %*s %*s ',repmat('%s ', 1, 24),'%*[^\n]'];
caption=textscan(fid,fmat,1,'delimiter',',','Headerlines',17); % Alternativ: a=textscan(fid,'%s',24,'delimiter',',','Headerlines',17); (erg dann aber durch Kommas als ein String)
caption=[caption{:}]; caption{1}='TIMESTAMP'; % Alternativ: horzcat(caption{:}); (macht aus einzelnen cell arrays einen)
% Messwerte einlesen
fmat2=['%s %s %*s ',repmat('%f ', 1, 24),'%*[^\n]']; % Format für textscan % frewind(fid); temp=textscan(fid,fmat2,'delimiter',',','Headerlines',1; % Alternatives Vorgehen
temp=textscan(fid,fmat2,'delimiter',','); % Einlesen (nimmt 95 % der Zeit in Anspruch) fclose(fid); % File schließen
Die Zeile die so extrem unterschiedlich lange benötigt ist die Zeile mit "textscan".
Viele Grüße.
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 21.01.2014, 21:12
Titel:
Ziemlich beschissen das Ganze. Der Support hat es bestätigt:
"I am not sure whether you are aware of this but in MATLAB R2012b we added the support for multiple delimiters and in MATLAB R2013a we added support for non-ASCII text files for "textscan". This added functionality has probably cause the slow down of textscan (which I could reproduce on my machine)."
Bedeutet - je nach Anwendung - benötigt dasselbe Skript nun doppelt solange ... keine Ahnung wie ich die Daten dann einlesen soll.
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 21.01.2014, 22:17
Titel: Aufbau format für fscanf
Ggf. musst du den regexp Code etwas anpassen, bzw. kannst du damit auch die restlichen numerischen Werte einlesen und du sparst dir csvread....alles eine Frage wie oft das ganze gemacht werden muss _________________
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
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.