MATLAB str to cell(平凡?)

时间:2012-01-11 15:15:08

标签: string matlab

我想用一个大字符串做一个单元格数组,例如我有:

str1 = ['aa1','bb1','cc1'];
str2 = ['aa2','bb2','cc2'];

问题是如何制作每个逗号分隔的字符串条目,单独的单元格数组条目。我正在寻找类似

的东西
dataCell = {eval(str1),';', ...
            eval(str2)};

最后,我希望得到以下内容:

dataCell = {'aa1','bb2','cc2'; 'aa2','bb2','cc2'}

我可以绕过循环并执行类似

的操作
dataCell {end+1} = 'string'; 

但如果可能的话,我想立刻做一切。

提前致谢。

PS问题是,哪种解决方案在性能方面最佳?

3 个答案:

答案 0 :(得分:4)

我喜欢这些问题,因为它可以向你展示各种不同的方法来做同样的事情:

str1=['aa1';'bb1';'cc1'];   
str2=['aa2';'bb2';'cc2'];  
data = [cellstr(str1) cellstr(str2)]'

data =     
    'aa1'    'bb1'    'cc1'
    'aa2'    'bb2'    'cc2'

再次假设str1和str2被;分开。

答案 1 :(得分:1)

首先,我想指出str=['aa1','bb1','cc1'];是一个char变量,它由连接的三个字符串组成(而不是str=['aa1';'bb1';'cc1'];,这是一个3乘1的char数组)。

假设您打算使用char数组,那么您可以使用函数mat2cell从char数组构建单元数组:

str1=['aa1';'bb1';'cc1'];
str2=['aa2';'bb2';'cc2'];
dataCell1=mat2cell(str1,ones(1,size(str1,1)),size(str1,2));
dataCell2=mat2cell(str2,ones(1,size(str2,1)),size(str2,2));
dataCell=[dataCell1 dataCell2]';

它为您提供以下单元格数组:

'aa1'    'bb1'    'cc1'
'aa2'    'bb2'    'cc2'

UPDATE :当你似乎关注性能时,我进行了一些测试来比较n×n字符数组中单元格数组的构建时间。这不是一个精确的基准,但它给出了有趣的结果。

n=5;
Elapsed time is 0.008 seconds for mat2cell.
Elapsed time is 0.002 seconds for cellstr
Elapsed time is 0.0003 seconds for the loop.
n=500;
Elapsed time is 0.015 seconds for mat2cell.
Elapsed time is 0.005 seconds for cellstr.
Elapsed time is 0.0015 seconds for the loop.
n=5000;
Elapsed time is 0.64 seconds for mat2cell.
Elapsed time is 0.20 seconds for cellstr.
Elapsed time is 0.16 seconds for the loop.

如果你想测试它(或纠正我可能的错误),我就是这样做的:

clear all;
n=500;
str=[repmat('a',1,n)];
strarray=repmat(str,n,1);
tic;
strcell=mat2cell(strarray,ones(1,size(strarray,1)),size(strarray,2));
toc;
clear all;
n=500;
str=[repmat('a',1,n)];
strarray=repmat(str,n,1);
tic;
strcell=cellstr(strarray);
toc;
clear all;
n=500;
str=[repmat('a',1,n)];
strarray=repmat(str,n,1);
tic;
strcell=cell(size(strarray,1),1);
for i=1:size(strarray,1)
   strcell{i}=strarray(i,:); 
end
toc;

答案 2 :(得分:0)

我猜你的意思是

str1 = ['aa1';'bb1';'cc1'];
str2 = ['aa2';'bb2';'cc2'];

否则你只需为每个变量获得一个向量。 在这种情况下,您应该使用:

mat2cell([str1;str2],ones(1,6),3)