matlab中光线到矩阵的转换

matlab中光线到矩阵的转换,matlab,csv,matrix,cell,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

我想在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
???在46处使用==>cell2mat时出错 输入单元格数组的所有内容必须具有相同的数据类型

在==>测试5时出错 T=cell2mat(C)


我的问题是我如何做到这一点?数据在下面的链接中。它包含数字,如ID、坐标和时间戳。

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

M = cell2mat(C(:,1:5));
或同等地

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

正如错误消息所说:

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

第6、7和8列是字符(日期字符串)。不可能将它们转换成矩阵。把他们留在牢房里

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


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

矩阵和单元数组(用MATLAB术语)的主要区别在于,矩阵包含相同类型和大小的元素,而单元数组包含不同类型和大小的元素

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

要对数值数据进行分组,必须仅选择单元格数组中的数值元素:

N = horzcat(C{1:5});
而对于字符串,应保留单元格数组结构:

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

稍后编辑:既然您承认自己是MATLAB新手,我将给出一个一般性的建议:每次您看到一个函数,从您的角度看,您不知道它意外地做了什么或表现了什么,请标记它的名称,然后按F1。MATLAB文档非常全面,还包含许多描述该函数典型用法的示例。

6列之后,您就有了字符串数据。您计划如何将它们存储到矩阵中?谢谢!不幸的是,我在笔记本电脑上使用Matlab,所以安装的版本是R2011b。因为我需要数值和时间,所以我还将使用datenum(),然后将其添加到数据矩阵中