2016-12-05 211 views
0

我用下面的代碼試圖導入csv file(7816 X 119)有很多微小的數字(1.0E-11和1.0E-9之間):導入CSV文件

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

當我檢查導入結果,我獲得

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

注意的D大小比原來的數據尺寸小了很多。

當我用一個數字較大的矩陣(而不是科學記數法)做同樣的過程時,我沒有任何問題。

我在想,如果MATLAB有一個限制的大小,我可以導入一個CSV文件或科學記數法的數字限制?

+2

我不能重現這一點。剝離你的數據直到它工作,找出它現在的工作原理。我想你的數據是在某個地方腐敗。小數字代表的是什麼?科學計數法? – pschulz

+0

@pschulz我已經這樣做,但找不到錯誤。數字以科學記數法表示。數據文件是[CSV數據文件](http://mathpr.com/data_matlab.csv)。 – wipitillo

+0

對於我提供的數據,它仍能正常工作。你一定在做別的事情。 – pschulz

回答

0

我能夠複製這個問題。使用xlsread沒有產生這個問題:

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

你正在使用哪個版本的matlab?你使用了提供的數據嗎?這很奇怪,我不能重現這個問題。 – pschulz

+0

我很確定它是在2015b 32位。我也有2016b 64,所以我可以檢查一下。 – Trogdor

+0

@Trogdor請讓我知道,如果你在2016b 64中獲得同樣的錯誤。在英寸情況下,我使用2015a 64. – wipitillo

1

由於被懷疑,你的數據在一些地方已損壞。在文件中搜索'DIV',你會發現一個條目'#DIV/0!'幾次。有趣的是,這個工作在我的一些matlab版本中(我目前不知道版本號),以及它在當前版本中以八度音階工作。

這裏測試:

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

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); 

你在哪裏得到的數據?你能影響輸出嗎?如果你不能手動替換錯誤條目(使用適當的工具)或使用@Trogdors答案。

+0

幹得好!我再次檢查,問題仍然存在與Matlab 2016b-64。 – Trogdor