Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String MATLAB str到单元(平凡?)_String_Matlab - Fatal编程技术网

String MATLAB str到单元(平凡?)

String MATLAB str到单元(平凡?),string,matlab,String,Matlab,我想用一个大字符串组成一个单元格数组,例如,我有: str1 = ['aa1','bb1','cc1']; str2 = ['aa2','bb2','cc2']; 问题是如何利用每个逗号分隔的字符串条目、分隔的单元格数组条目。我在找类似的东西 dataCell = {eval(str1),';', ... eval(str2)}; 最后,我希望有以下几点: dataCell = {'aa1','bb2','cc2'; 'aa2','bb2','cc2'} 我本可以做

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

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问题是在所有解决方案中,哪一个在性能方面是最好的?

首先,我想指出
str=['aa1'、'bb1'、'cc1']
是一个字符变量,由三个串接的字符串组成(与
str=['aa1';'bb1';'cc1'];
是一个3×1字符数组相反)

假设您想要一个字符数组,那么您可以使用该函数从字符数组构建单元格数组:

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'
更新:由于您似乎关心性能,我运行了一个小测试来比较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;

首先,我想指出,
str=['aa1','bb1','cc1']
是一个字符变量,由三个串接的字符串组成(与
str=['aa1';'bb1';'cc1'];
是一个3×1字符数组相反)

假设您想要一个字符数组,那么您可以使用该函数从字符数组构建单元格数组:

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'
更新:由于您似乎关心性能,我运行了一个小测试来比较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;
我想你是说

str1 = ['aa1';'bb1';'cc1'];
str2 = ['aa2';'bb2';'cc2'];
否则,每个变量只能得到一个向量。 在这种情况下,您应该使用:

mat2cell([str1;str2],ones(1,6),3)
我想你是说

str1 = ['aa1';'bb1';'cc1'];
str2 = ['aa2';'bb2';'cc2'];
否则,每个变量只能得到一个向量。 在这种情况下,您应该使用:

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

我喜欢这类问题,因为它可以向你展示做同一件事的各种不同方式:

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

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

再次假设str1和str2是
分离。

我喜欢这类问题,因为它可以向您展示做同一件事的各种不同方式:

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

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

再次假设str1和str2是
分隔。

str1=['aa1','bb1','cc1']
只是将字符串连接到
aa1bb1cc1
,这可能不是您想要的
只是将字符串连接到
aa1bb1cc1
,这可能不是您想要的。谢谢,事实上我想要您答案的转置。就性能而言,此解决方案将比仅仅附加更快?谢谢,事实上我想要您答案的转置。就性能而言,这个解决方案比简单的附加更快?问题是,哪种解决方案在性能方面最好?事实上,通常有更多的方法来做一件事,我认为你的代码更简单、更优雅。@HeinrichStack我在代码周围执行了一个
tic
toc
,使用了一个分别约为22000x3字符数组的str1和str2。我的是0.155秒,亚巴兹是0.200秒。我没有尝试Itamar的答案,因为这给了我一个单一的列向量。所以速度在这里可能不是问题。我还注意到,在一篇评论中,你想把这个答案转置。如果是这样,请从
数据=
行末尾删除
,我不理解这个问题。这将使str3成为具有str1和2端到端值的单个列。你想用它做什么?我有一个大字符串,包含单元格数组的不同行。目标是转换成单元阵列问题是,哪种解决方案在性能方面最好?事实上,通常有更多的方法来做一件事,我认为你的代码更简单、更优雅。@HeinrichStack我在代码周围执行了一个
tic
toc
,使用了一个分别约为22000x3字符数组的str1和str2。我的是0.155秒,亚巴兹是0.200秒。我没有尝试Itamar的答案,因为这给了我一个单一的列向量。所以速度在这里可能不是问题。我还注意到,在一篇评论中,你想把这个答案转置。如果是这样,请从
数据=
行末尾删除
,我不理解这个问题。这将使str3成为具有str1和2端到端值的单个列。你想用它做什么?我有一个大字符串,包含单元格数组的不同行。目标是转换为单元数组