ich möchte meine "import"-Funktion etwas schneller machen.
Wenn ich große Datensätze(122 Dateien mit einer 51200 x 18 Tabelle) reinlade braucht es 15min (7sek pro Datei). Das ist schon etwas arg lange.
Ich habe was gelesen mit "zeros", das man vorher die Matrix vorgibt. Bringt das was, wenn ja wie funktioniert das.
Und wenn nein, gibt es dann andere Möglichkeiten?
csvfiles = dir('*.csv'); % Finde alle csv Dateien aus dem geöffneten Ordner
num_files = length(csvfiles); % Anzahl der csv Dateien for i = 1:num_files; % für i = 1 bis num_files
n{i} = importtable_test(csvfiles(i).name, 3, inf); % Importiere alle csv Dateien in ein Array end
die entscheidende Frage ist dann, was in deiner importtable_test steht.
Wie sind deine Daten aufgebaut?
Selbst wenn du nur numerische Daten hast, komme ich grob überschlagen auf ein knappes GB an Daten. Da würde ich dann auch nicht erwarten, dass das innerhalb von Sekunden importiert ist. Es kann aber gut möglich sein, das deutlich zu reduzieren.
function H13188n932a30Config01 = importtable_test(filename, startRow, endRow)
%IMPORTFILE Import numeric data from a text file as a matrix.
% H13188N932A30CONFIG01 = IMPORTABLE_TEST(FILENAME) Reads data from text file % FILENAME for the default selection.
%
% H13188N932A30CONFIG01 = IMPORTFILE(FILENAME, STARTROW, ENDROW) Reads % data from rows STARTROW through ENDROW of text file FILENAME.
%
% Example: % H13188n932a30Config01 = importtable_test('123456_H131-88_n932_a30_Config01.csv', 3, 51202);
%
% See also TEXTSCAN.
% Auto-generated by MATLAB on 2015/10/12 09:20:44
%% Initialize variables.
delimiter = ',';
if nargin<=2
startRow = 3;
endRow = inf;
end
%% Open the text file.
fileID = fopen(filename,'r');
%% Read columns of data according to format string. % This call is based on the structure of the file used to generate this % code. If an error occurs for a different file, try regenerating the code % from the Import Tool.
dataArray = textscan(fileID, formatSpec, endRow(1)-startRow(1)+1, 'Delimiter', delimiter, 'EmptyValue' ,NaN,'HeaderLines', startRow(1)-1, 'ReturnOnError', false);
for block=2:length(startRow) frewind(fileID);
dataArrayBlock = textscan(fileID, formatSpec, endRow(block)-startRow(block)+1, 'Delimiter', delimiter, 'EmptyValue' ,NaN,'HeaderLines', startRow(block)-1, 'ReturnOnError', false);
for col=1:length(dataArray)
dataArray{col} = [dataArray{col};dataArrayBlock{col}];
end end
%% Post processing for unimportable data. % No unimportable data rules were applied during the import, so no post % processing code is included. To generate code which works for % unimportable data, select unimportable cells in a file and regenerate the % script.
Die Datei wurde nicht angefügt weil csv dateien verboten sind. Hab ich nicht bemerkt sorry.
Hier mal als xls datei. Muss man ahlt in csv wieder umwandeln.
die Daten sind schon lokal auf der Festplatte gespeichert und werden nicht etwa von einem Netzlaufwerk gezogen?
Ich sehe keine großen Optimierungsmöglichkeiten.
Das mag dir zwar wenig helfen, aber einfach zum Vergleich:
Bei mir wird diese Datei in ~0,2 s importiert...
Solltest du öfter dieselben Dateien brauchen, lohnt sich eventuell das Speichern als .mat. Dann dauert es bei mir für diese eine Datei nur ~0,02 s.
Oh man, es lag definitiv daran das ich die Daten auf einem Netzlaufwerk hatte!
Jetzt dauert es pro Datei nur noch eine halbe Sekunde
Danke an so eine einfache Lösung hab ich nich gedacht!
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
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.