在matlab中使用cellarray到矩阵

时间:2015-09-25 09:33:08

标签: matlab csv matrix cell

我想在m文件中导入一些数据。因此,我设法创建了数据的单元格数组。我想将其转换为矩阵。我使用cell2mat但是我收到了错误。我是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中。它包含数字,ids和坐标以及时间戳。

3 个答案:

答案 0 :(得分:0)

我假设您只想转换C的前五列,这些列是包含数字数据的列。您可以按如下方式使用cell2mat

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

或等效

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

答案 1 :(得分:0)

正如错误消息所示:

  

输入单元格数组的所有内容必须具有相同的数据类型。

第6列,第7列和第8列是字符(datetrings)。无法将它们转换为矩阵。把它们留在牢房里。

您只能将数值数据转换为矩阵:data = cell2mat(C(:,1:5))。必须使用datenum()将左侧三列转换为数字时间,以将其添加到data矩阵。

当您获得> = R2013b时,您可以使用以下表格作为数据类型:data = readtable('vessel-movements.csv');

答案 2 :(得分:0)

矩阵和单元格数组之间的主要区别(用MATLAB说法)是矩阵包含相同类型和大小的元素,而单元格数组包含不同类型和大小的元素。

您阅读数字和字符串。数字 do 具有相同的类型和大小(double,1×1),而字符串则不同(它们都是char类型,但通常大小不同)。

要对数字数据进行分组,您必须只选择单元格数组的数字元素:

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

而对于字符串,你应该保留单元格数组结构:

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

稍后编辑:由于您承认自己是MATLAB的新手,我将提出一般性建议:每当您看到一个您不知道它的作用的功能时 - 或者从你的角度出乎意料地行动 - 标记其名称并按F1。 MATLAB文档非常全面,并且还包含许多描述该函数的典型用法的示例。