|
kripy |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 20.02.2008, 14:00
Titel: fread() ist aber langsam
|
|
Hallo,
ich hab ein DAT-File, das ich einlesen muss.
Problem: Mit fread() dauert in meinem Fall lang!!
Hat jemand eine Idee wie man die fread() Funktion bzgl. der schnelligkeit optimieren kann oder
gar eine andere gleichartige Funktion zu benutzen die schneller als fread()??
Danke Euch.
|
|
|
|
|
keloid |
Forum-Century
|
|
Beiträge: 216
|
|
|
|
Anmeldedatum: 04.10.07
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 7.5.0.342 (R2007b)
|
|
|
|
|
|
Verfasst am: 20.02.2008, 14:04
Titel:
|
|
Wenn Du ASCII-Daten (also Textdaten z.B.) einlesen willst, ist fgetl recht brauchbar, oder wenns Tabellen in Textformat sind dlmread oder xlsread oder ähnliches.
Schau da mal in der Hilfe, ich kann leider nichts genaues sagen, da ich alles über fread machen muss ;)
|
|
|
kripy |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 20.02.2008, 14:33
Titel:
|
|
es wäre schön wenn es eine textdatei wäre.
Aber es ist leider eine binäre Datei.HILFE!!!!!!
|
|
|
nschlange |
Ehrenmitglied
|
|
Beiträge: 1.320
|
|
|
|
Anmeldedatum: 06.09.07
|
|
|
|
Wohnort: NRW
|
|
|
|
Version: R2007b
|
|
|
|
|
|
Verfasst am: 20.02.2008, 14:58
Titel:
|
|
Da kann ich jetzt aus dem Stegreif nichts weiter zu sagen,
als dass memmapfile schneller sein soll.
_________________
Viele Grüße
nschlange
"Chuck Norris ejakuliert fluessigen Stahl!"
|
|
|
Titus |
Forum-Meister
|
|
Beiträge: 871
|
|
|
|
Anmeldedatum: 19.07.07
|
|
|
|
Wohnort: Aachen
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.02.2008, 11:46
Titel:
|
|
Hallo,
eigentlich ist fread schnell. Daher die Frage: wie liest Du die Datei ein (wie sieht der Aufruf von fread aus)? Wie groß ist sie?
Titus
|
|
|
kripy |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 27.02.2008, 08:20
Titel:
|
|
es sieht so aus:
data=fread(fid,double(count)*numSameFields(fieldGroup),precisionString,skip);
Der Profiler gibt an dass es bei dem fread am meistens dauert!!!
|
|
|
kripy |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 27.02.2008, 08:24
Titel:
|
|
|
|
|
Noch ausführlicher:
for fieldGroup=1:length(numSameFields)
% Set pointer to start of fieldGroup
offsetPointer=offset+startFieldBytes(field);
fseek(fid,offsetPointer,'bof');
count=1*repeat; % Number of rows repeated
precision=precisions{field}; % Extract precision of all channels in field
% Calculate precision string
if strcmp(precision, 'ubit1')
skip=8*(numBlockBytesAligned-getsize(precision)*numSameFields(fieldGroup)); % ensure byte aligned
precisionString=[int2str(numSameFields(fieldGroup)) '*ubit1=>uint8'];
elseif strcmp(precision, 'ubit2')
skip=8*(numBlockBytesAligned-getsizealigned(precision)*numSameFields(fieldGroup)); % ensure byte aligned
precisionString=[int2str(numSameFields(fieldGroup)) '*ubit2=>uint8']; % TO DO change skip to go to next byte
else
skip=numBlockBytesAligned-getsize(precision)*countsSameFields(fieldGroup)*numSameFields(fieldGroup); % ensure byte aligned
precisionString=[int2str(numSameFields(fieldGroup)*countsSameFields(fieldGroup)) '*' precision '=>' precision];
end
% Read file
if countsSameFields(fieldGroup)==1 % TO Do remove condistiuon
data=fread(fid,double(count)*numSameFields(fieldGroup),precisionString,skip);
% m=memmapfile(fileName);
% data=m.Data;
else %% string
% Read in columnwize, ech column is a string lengt - countsSameFields(fieldGroup)
data=fread(fid,double([countsSameFields(fieldGroup) count*numSameFields(fieldGroup)]),precisionString,skip);
data=data';
end
% Copy each field from the field group into the cell array
if numSameFields(fieldGroup)==1
Block{field}=data;
field=field+1;
else
for k=1:numSameFields(fieldGroup)
Block{field}=data(k:numSameFields(fieldGroup):end);
field=field+1;
end
end
end
|
|
|
kripy |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 27.02.2008, 12:12
Titel:
|
|
HILFE!!!!!!!!!!!!!!!!!!!!!!
|
|
|
kripy |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 27.02.2008, 14:22
Titel:
|
|
|
|
keloid |
Forum-Century
|
|
Beiträge: 216
|
|
|
|
Anmeldedatum: 04.10.07
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 7.5.0.342 (R2007b)
|
|
|
|
|
|
Verfasst am: 27.02.2008, 17:11
Titel:
|
|
Ich sags mal so:
Je nachdem, wie groß "numSameFields" ist, ist eher die Schleife der limitierende Faktor und nicht fread an sich.
fread unter Matlab hat ja die Möglichkeit, große Datenmengen auf einmal einzulesen, wenn man hingegen einen C/C++-Code als Matlab-Skript laufen lässt, kommt es immer zu großen Verzögerungen.
Zwei Alternativen fallen mir spontan ein:
1. Versuche, die auf einmal einzulesende Datenmenge zu erhöhen, um so die Schleife künstlich zu verkürzen.
2. Versuche, das Ding als mex-Datei zu kompilieren.
|
|
|
kripy |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 28.02.2008, 09:46
Titel:
|
|
ich danke dir sehr.
|
|
|
kripy |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 28.02.2008, 09:56
Titel: Die Ausgabe in Workspace in einer Textdatei speichern
|
|
Dann habe ich eine andere Frage:
Besteht eine Möglichkeit die Ausgaben in Workspace irgendwie
in einer Textdatei zu speichern?
Die Ausgaben sind keine Variablen sondern nur Texte!!!
|
|
|
Bijick |
Ehrenmitglied
|
|
Beiträge: 914
|
|
|
|
Anmeldedatum: 18.06.07
|
|
|
|
Wohnort: Nürnberg
|
|
|
|
Version: R2006b, R2008b
|
|
|
|
|
|
Verfasst am: 28.02.2008, 10:00
Titel:
|
|
Meinst Du die Ausgaben im Command Window? Dann könnte Dir der diary-Befehl helfen.
Beliebige Texte und Zahlen kann man mit fprintf in Dateien schreiben.
Herzliche Grüße
Bijick
PS: Wegen der zwei Kurzbeiträge gestern Mittag von Dir verweise ich Dich mal auf http://www.gomatlab.de/der-kleine-gomatlab-de-knigge-t125.html.
_________________
>> why
|
|
|
kripy |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 28.02.2008, 12:29
Titel:
|
|
hallo bijik,
das problem ist, dass diary befehl den filename aus uiputfile nicht annimmt?
danke.
|
|
|
outsider |
Forum-Meister
|
|
Beiträge: 806
|
|
|
|
Anmeldedatum: 03.09.07
|
|
|
|
Wohnort: München
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 28.02.2008, 22:26
Titel:
|
|
kannst Du nicht ein Beispiel Binary-File hochladen? Der sollte aber aus mindestens ein Paar Samples bestehen.
MfG
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|