Arrays Matlab单元阵列
目前,我有一个435x1单元阵列,它是用importdata形成的。每个元素都是一个由17个值组成的字符串,值之间用逗号分隔 我希望字符串填充每行的列,而不是在一个元素中包含每行一个字符串。基本上,我想要一个435x17单元数组,其中每个元素都是一个单元数组,而不是一个435x1单元数组,每个元素都是一个字符串 到目前为止,我得到的最接近的结果是:Arrays Matlab单元阵列,arrays,matlab,cell,Arrays,Matlab,Cell,目前,我有一个435x1单元阵列,它是用importdata形成的。每个元素都是一个由17个值组成的字符串,值之间用逗号分隔 我希望字符串填充每行的列,而不是在一个元素中包含每行一个字符串。基本上,我想要一个435x17单元数组,其中每个元素都是一个单元数组,而不是一个435x1单元数组,每个元素都是一个字符串 到目前为止,我得到的最接近的结果是: data = importdata('my_data.data'); for x=1:size(data,1) data(x,:) = {s
data = importdata('my_data.data');
for x=1:size(data,1)
data(x,:) = {strsplit(data{x}, ',')};
end
这将使每个元素处的字符串成为单元格数组。在上面的代码中,我仍然有一个435x1单元数组,但每个元素现在都是一个1x17单元数组
有人能告诉我把它变成435x17单元阵列吗?感谢您的帮助
数据文件中的一行如下所示:
republican,n,y,n,y,y,y,n,n,n,y,?,y,y,y,n,y
这些字符串共有435行。我想要一个435x17单元格数组,其中列是由逗号分隔的字符串。您有任何示例数据吗?也许只是csv文件的几行 无论如何,如果您有R2013b,您应该能够使用一个表来完成这项工作。对于“data.csv”文件:
republican,n,y,n,y,y,y,n,n,n,y,?,y,y,y,n,y
democrat,y,n,y,n,n,n,y,y,y,n,!,n,n,n,y,n
然后,可以使用以下命令将其导入matlab:
这就是如何轻松创建表的方法。我还建议只使用一个表来保存这些数据,而不是将其作为一个单元格数组来处理,因为它是用来处理数据处理任务的,并且具有一些可能有助于您尝试执行的功能。但是,如果您确实需要将其转换为单元格数组,您当然可以将表转换为单元格:
>> c = table2cell(t)
c =
'republican' 'n' 'y' 'n' 'y' 'y' 'y' 'n' 'n' 'n' 'y' '?' 'y' 'y' 'y' 'n' 'y'
'democrat' 'y' 'n' 'y' 'n' 'n' 'n' 'y' 'y' 'y' 'n' '!' 'n' 'n' 'n' 'y' 'n'
>> size(c)
ans =
2 17
希望有帮助 您有任何样本数据吗?也许只是csv文件的几行 无论如何,如果您有R2013b,您应该能够使用一个表来完成这项工作。对于“data.csv”文件:
republican,n,y,n,y,y,y,n,n,n,y,?,y,y,y,n,y
democrat,y,n,y,n,n,n,y,y,y,n,!,n,n,n,y,n
然后,可以使用以下命令将其导入matlab:
这就是如何轻松创建表的方法。我还建议只使用一个表来保存这些数据,而不是将其作为一个单元格数组来处理,因为它是用来处理数据处理任务的,并且具有一些可能有助于您尝试执行的功能。但是,如果您确实需要将其转换为单元格数组,您当然可以将表转换为单元格:
>> c = table2cell(t)
c =
'republican' 'n' 'y' 'n' 'y' 'y' 'y' 'n' 'n' 'n' 'y' '?' 'y' 'y' 'y' 'n' 'y'
'democrat' 'y' 'n' 'y' 'n' 'n' 'n' 'y' 'y' 'y' 'n' '!' 'n' 'n' 'n' 'y' 'n'
>> size(c)
ans =
2 17
希望有帮助 您可以使用
cat
执行此操作。下面是一个较小的示例:
data = {{1,2,3};{4,5,6};{7,8,9};{10,11,12}};
size(data)
ans =
4 1
newData = cat(1,data{:});
size(newData)
ans =
4 3
编辑:
如果您有一个字符串单元格数组,则可以执行以下操作:
data = {{'123'};{'456'};{'789'};{'abc'}};
size(data)
ans =
4 1
data2 = cat(1, data{:});
data3 = cell2mat(newData);
size(data3)
ans =
4 3
data3 =
123
456
789
abc
可以使用
cat
执行此操作。下面是一个较小的示例:
data = {{1,2,3};{4,5,6};{7,8,9};{10,11,12}};
size(data)
ans =
4 1
newData = cat(1,data{:});
size(newData)
ans =
4 3
编辑:
如果您有一个字符串单元格数组,则可以执行以下操作:
data = {{'123'};{'456'};{'789'};{'abc'}};
size(data)
ans =
4 1
data2 = cat(1, data{:});
data3 = cell2mat(newData);
size(data3)
ans =
4 3
data3 =
123
456
789
abc
试着这样做:
temp_data = importdata('my_data.data');
data = cell(size(temp_data,1),17);
for x=1:size(temp_data,1)
data(x,:) = strsplit(temp_data{x}, ',');
end
clear temp_data;
试着这样做:
temp_data = importdata('my_data.data');
data = cell(size(temp_data,1),17);
for x=1:size(temp_data,1)
data(x,:) = strsplit(temp_data{x}, ',');
end
clear temp_data;
如果您没有R2013b,或者出于某种原因不想利用表,也可以这样做:
cellData = cell(numel(data), 17); % preallocate
for idx=1:numel(data)
cellData(idx,:) = strsplit(data{idx}, ',');
end
如果您没有R2013b,或者出于某种原因不想利用表,也可以这样做:
cellData = cell(numel(data), 17); % preallocate
for idx=1:numel(data)
cellData(idx,:) = strsplit(data{idx}, ',');
end
您好,这适用于您发布的示例,但不适用于我的示例。每个元素实际上都是一个字符串,而不是一个单元格数组(直到我运行我“关闭”的代码块)。有没有办法直接从字符串的单元格数组转换为nxm单元格数组,n=字符串的数量,m=字符串的长度?嗨,这对你发布的示例有效,但对我的示例无效。每个元素实际上都是一个字符串,而不是一个单元格数组(直到我运行我“关闭”的代码块)。有没有办法直接从字符串单元格数组转换为nxm单元格数组,n=字符串数量,m=字符串长度?谢谢,我用另一条与共和党行相反的伪造民主党行更新了我的答案:-)我还添加了如何将表转换为单元格数组,但那可能不是你想做的,我明白了。我不知道readtable只适用于r2013b。我正在使用r2013a。希望你的答案能对其他人有所帮助。谢谢,我用你的数据更新了我的答案,用的是另一条伪造的民主党行,与共和党行正好相反:-)我还添加了如何将表格转换为单元格数组,但这可能不是你想要做的。我明白了。我不知道readtable只适用于r2013b。我正在使用r2013a。希望你的回答能帮助别人。