元胞数组矩阵矩阵

cellarray to matrix in matlab

我想将一些数据导入到 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

??? Error using ==> cell2mat at 46 All contents of the input cell array must be of the same data type.

Error in ==> test at 5 T = cell2mat(C)

我的问题是我该怎么做?数据在下面linkvessel-movements.csv。它包含数字,如 ID 和坐标,以及时间戳。

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

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

或等同于

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

如错误信息所述:

All contents of the input cell array must be of the same data type.

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

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

当你得到 >=R2013b 时,你可以使用数据类型 a table,例如:data = readtable('vessel-movements.csv');

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

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

要对数值数据进行分组,您必须 select 只有元胞数组的数值元素:

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

而对于字符串,您应该保留元胞数组结构:

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

稍后编辑:既然你承认你是 MATLAB 的新手,我将提出一个一般性的建议:每次你看到一个你不知道的函数知道它的作用——或者从你的角度来看有意想不到的行为——标记它的名字并按 F1。 MATLAB 文档非常全面,还包含许多描述该函数典型用途的示例。