2016-09-21 140 views
0

我試圖從文本文件導入數據。數據文件格式應該是第一行是char,其他是數字,就像xls文件一樣。但該文件是由其他軟件生成的文本文件,其中所有數據都在一行中,一個空格分隔開,「tab」作爲新的一行數據。Matlab導入數據文本文件

的數據格式我想導入到MATLAB應該是這樣的:

A B C D 
1 2 3 4 
5 6 8 8 
8 0 9 5 

但現在在文本文件中的數據是

A B C D 1 2 3 4 5 6 8 8 8 0 9 5 

我應該如何導入文本文件導入像矩陣中的矩陣像請嗎?我試過importdata,但答案是4x1單元格。我的Matlab版本是2008.

對不起,我對matlab很新。謝謝。

編輯: 我意識到,數據

A B C D 1 2 3 4 5 6 8 8 8 8 0 9 5 7 0 8 8 8 5 0 9 9 

請你教我怎麼把這些東西進入細胞內,具有一個char /數一個細胞嗎?

A B C D 
    1 2 3 4 
5 6 8 8 8 
    8 0 9 5 
7 0 8 8 8 
    5 0 9 9 

表兄弟姐妹當我使用cell2mat的建議,錯誤味精是CAT arguments dimensions are not consistent.

非常感謝您!

+0

因爲你有兩種不同類型的(雙和焦炭),它不是可能將所有內容放在一個矩陣中。這就是'mportdata'產生單元陣列的原因。 – bushmills

+0

爲什麼你仍然在使用2008版的Matlab? – Bernhard

+0

我們不支付牌照嗎? = P –

回答

1

讓我們從您從文本文件生成的單元格數組開始。我稱之爲A。這是一個4x1。或者也許1x4?使用以下行我們確保我們從相同點開始:

A = A(:); % make sure A is columnar 

A是一個單元陣列與含有名稱和從第二到含端號碼作爲字符串的第一個元素。


案例1:各部分的尺寸一致:製備基體

在這裏,我們將看到如何從這個單元陣列中提取所需的矩陣。

首先,我們需要strread,使載體從一個字符串(您也可以使用textscan):

v = strread(A{2}) 

v = 

    1  2  3  4 

現在,我們應該應用在每個單元此功能,並在基體結合的載體。這可能使用cellfun來實現,但由於我們必須先產生一個單元陣列,在最後我們需要一個cell2mat

M = cell2mat(cellfun(@strread, A(2:end), 'UniformOutput', false)) 

這裏,M是最終的結果。

M = 

    1  2  3  4 
    5  6  8  8 
    8  0  9  5 

情況2:不一致的尺寸+組合字符/數:製作一個單元陣列

我們希望將數據與每個元件佔據一個單元轉變成一個單元陣列。從celldata第一行開始,我們可以使用strsplit破名稱爲單元陣列的字符串:

celldata = strsplit(A{1}); 

% maximum data count in each cell of A 
maxL = max(cellfun(@(x) numel(strsplit(x)), A)); 

% constructing an empty cell array to be filled with the data 
% the importance of this step dramatically increases with the data size! 
celldata{numel(A), maxL} = []; 

現在,你可以通過celldata並填寫它的細胞有正確的價值觀:

for ii = 2:numel(A) 
    val = strread(A{ii}); 
    celldata(ii, 1:numel(val)) = num2cell(val); 
end 

celldata是這種形式的單元陣列:

celldata = 

    'A' 'B' 'C' 'D'  [] 
    [1] [2] [3] [4]  [] 
    [5] [6] [8] [8] [8] 
    [8] [0] [9] [5]  [] 
    [7] [0] [8] [8] [8] 
    [5] [0] [9] [9]  [] 
+0

謝謝!請問請進一步嗎?因爲我意識到文本文件中的數據是不穩定的大小。它就像'A B C D 1 2 3 4 5 6 9 8 8 8 8 0 9 5'。錯誤消息是'CAT參數維度不一致'。 – Cii

+0

不客氣@Cii。 2個問題:除了最後一個之外,所有尺寸都是一致的嗎?在那種情況下,你最想怎麼處理最後一個呢?刪除它或用零/ NaNs擴展它? – erfan

+0

哦,抱歉,剛纔的評論無法顯示數據集的大小。現在的數據是中間集合再獲得一個數據。因此,而不是5,6,8,8,現在它變成5,6,8,8,8。現在是1x5雙倍,而其他則是1x4雙倍。也許我編輯我的問題,以更好地顯示矩陣。 – Cii