2015-09-25 210 views
-2

我想導入一些數據在一個m文件。因此,我設法創建了數據的單元陣列。我想將它轉換成矩陣。我用cell2mat但我得到一個錯誤。我是Matlab的新手,所以我想要一些幫助。這裏是我完整的代碼cellarray在矩陣matlab

fid = fopen('vessel-movements.csv'); 
C = textscan(fid, '%f %f %f %f %f %s %s %s', 'HeaderLines', 1, 'Delimiter', ',') 
fclose(fid); 
iscell(C) 
T = cell2mat(C) 

我得到的答案是:

C = 
Columns 1 through 4 

[300744x1 double] [300744x1 double] [300744x1 double] [300744x1 double] 

Columns 5 through 8 

[300744x1 double] {300744x1 cell} {300744x1 cell} {300744x1 cell} 

ans = 

    1 

???錯誤使用==> cell2mat at 46 輸入單元格數組的所有內容必須具有相同的數據類型。

錯誤==>測試在5 T = cell2mat(C)

我的問題是如何做呢?數據位於以下鏈接vessel-movements.csv。它包含數字,ID和座標以及時間戳。

+1

第6列你有字符串數據。你打算如何將它們存儲在矩陣中? – Divakar

回答

0

作爲錯誤消息指出:

輸入單元陣列的所有內容必須是相同的數據類型的。

列6,7和8是字符(日期字符串)。無法將它們轉換爲Matrix。把他們留在一個牢房裏。

您只能將數值數據轉換爲矩陣:data = cell2mat(C(:,1:5))。左三列必須用datenum()轉換成數字時間,以將其添加到data矩陣。

當你有> = R2013b,可以作爲數據類型使用一個表,如:data = readtable('vessel-movements.csv');

+0

謝謝!不幸的是,我在膝上型電腦上使用Matlab,因此安裝的版本是R2011b。因爲我需要數值和時間我也會使用datenum(),然後我將它添加到數據矩陣 – vasouli

0

我假設你只想轉換C的前五列,它們是包含數字數據的列。可以使用cell2mat如下:

M = cell2mat(C(:,1:5)); 

或等效

M = [C{:,1:5}]; 
0

基質和單元陣列(在MATLAB說法)之間的主要差別是,保持矩陣的元素相同的類型和大小,而單元陣列包含不同類型和大小的元素。

您讀取數字和字符串。數字具有相同的類型和大小(double,1 × 1),而字符串不同(他們都是char類型,但通常不同的大小)。

,以便將數字數據,您只能選擇您的單元陣列的數字元素:

N = horzcat(C{1:5}); 

而對於字符串,你應該保持單元陣列結構:

S = horzcat(C{6:8}); 

後來編輯:既然你承認你是MATLAB新手,我會提出一個一般性建議:每當你看到一個函數,你不知道它在做什麼—或意外的表現查看—標記其名稱並按F1。 MATLAB文檔非常全面,並且還包含很多描述該函數典型用法的示例。