2016-12-05 3 views
0

Ich versuche, eine csv file (7816 x 119) mit einer Menge von kleinen Zahlen zu importieren (zwischen 1.0E-11 und 1.0E-9) mit dem folgenden Code:Import von CSV-Dateien in MATLAB

filename = 'dataset.csv'; 
D = importdata(filename,',',1); 

Wenn ich das Importergebnis überprüfen erhalte ich

D= 
data: [187x119 double] 
textdata: {1x119 cell} 
colheaders: {1x119 cell} 

Beachten Sie, dass die Größe der D viel kleiner als die ursprüngliche Datengröße.

Wenn ich den gleichen Prozess mit einer Matrix mit größeren Zahlen (nicht wissenschaftliche Notation) mache, habe ich kein Problem.

Ich frage mich, ob MATLAB eine Beschränkung der Größe haben, die ich in einer CSV-Datei oder Einschränkungen mit Zahlen in wissenschaftlicher Notation importieren kann?

+2

Ich kann das nicht reproduzieren. Entfernen Sie Ihre Daten, bis sie funktioniert, und finden Sie heraus, warum sie jetzt funktioniert. Ich schätze, deine Daten sind irgendwo korrupt. Wie sind die winzigen Zahlen dargestellt? Wissenschaftliche Schreibweise? – pschulz

+0

@pschulz Ich mache das schon, kann aber den Fehler nicht finden. Die Zahlen sind in wissenschaftlicher Notation dargestellt. Die Datendatei ist [CSV-Datei] (http://mathpr.com/data_matlab.csv). – wipitillo

+0

Es funktioniert immer noch gut mit den von Ihnen angegebenen Daten. Sie müssen etwas anderes falsch machen. – pschulz

Antwort

0

Ich konnte das Problem replizieren. Mit xlsread nicht produzieren diese Frage:

filename = 'data_matlab.csv'; 
d = xlsread(filename); 
+0

Welche Version von Matlab verwenden Sie? Haben Sie die bereitgestellten Daten verwendet? Das ist seltsam, ich kann das Problem nicht reproduzieren. – pschulz

+0

Ich bin mir ziemlich sicher, dass es mit 2015b 32 Bit war. Ich habe auch 2016b 64, also kann ich das überprüfen. – Trogdor

+0

@Trogdor Bitte lassen Sie mich wissen, wenn Sie den gleichen Fehler in 2016b 64 erhalten. In mi Fall verwende ich 2015a 64. – wipitillo

1

Wie vermutet wird, werden Ihre Daten an einigen Stellen beschädigt. Suchen Sie nach 'DIV' in der Datei, Sie finden einen Eintrag '# DIV/0!' mehrmals. Interessanterweise funktionierte das in einigen Matlab-Versionen für mich (ich kenne die Versionsnummer derzeit nicht) und es funktioniert in Oktaven mit einer aktuellen Version.

Hier ist der Test:

D = csvread('data_matlab.csv', 1, 0); 

gibt

Error using dlmread (line 143) 
Mismatch between file and format string. 
Trouble reading 'Numeric' field from file (row number 187, field number 72) ==> 
#DIV/0!,1.11E-08,0,9.28E-09,2.8E-09,0.000000031,1.99E-08,6.49E-10,1.75E-09,9.66E-09,8.47E-10,3.82E-09,2.41E-10,1.71E-09,5.48E-09,1.32E-09,8.73E-09,2.05E-09,8.89E-10,3.83E-10,0,1.36E-08,2.92E-09,3.08E-... 

Error in csvread (line 47) 
    m=dlmread(filename, ',', r, c); 

Wo Sie die Daten aus bekommen Sie? Kannst du die Ausgabe beeinflussen? Wenn Sie die fehlerhaften Einträge nicht manuell ersetzen können (mit einem geeigneten Tool) oder verwenden Sie @Trogdors Antwort.

+0

Gut gemacht! Ich habe es überprüft und das Problem besteht immer noch bei Matlab 2016b-64. – Trogdor