我想在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和坐标以及时间戳。
答案 0 :(得分:0)
答案 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文档非常全面,并且还包含许多描述该函数的典型用法的示例。