元胞数组矩阵矩阵
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 文档非常全面,还包含许多描述该函数典型用途的示例。
我想将一些数据导入到 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 文档非常全面,还包含许多描述该函数典型用途的示例。