我怎样才能连接:
A = {'hello'; 'hi'; 'hey'}
和
B = {'Ben'; 'Karen'; 'Lisa'}
中间有空格可以得到:
C = {'hello Ben'; 'hi Karen'; 'hey Lisa'}
有没有快速的非循环方式?
我怎样才能连接:
A = {'hello'; 'hi'; 'hey'}
和
B = {'Ben'; 'Karen'; 'Lisa'}
中间有空格可以得到:
C = {'hello Ben'; 'hi Karen'; 'hey Lisa'}
有没有快速的非循环方式?
您可以使用strcat()
,尽管它执行一个循环:
strcat(A,{' '}, B)
通过将其包含在单元格中来保留空白。
或者,FEX:CStrCatStr是一个 mex 例程,可实现 10 倍加速(取决于测试环境):
CStrCatStr(A,' ', B)
strcat
连接字符串的更快(虽然不太优雅)的替代方法是sprintf
和textscan
命令的组合:
C = [A; B];
C = textscan(sprintf('%s %s\n', C{:}), '%s', 'delimiter', '\n');
这是基准代码:
A = {'hello' ; 'hi' ; 'hey'};
B = {'Ben' ; 'Karen' ; 'Lisa'};
%// Solution with strcat
tic
for k = 1:1000
C1 = strcat(A, ' ', B);
end
toc
%// Solution with sprintf and textscan
tic
for k = 1:1000
C2 = [A; B];
C2 = textscan(sprintf('%s %s\n', C2{:}), '%s', 'delimiter', '\n');
end
toc
结果是:
Elapsed time is 0.022659 seconds.
Elapsed time is 0.006011 seconds.
您可以使用 cellfun 做到这一点:
cellfun(@(x,y) [x, ' ', y], A, B, 'UniformOutput', false)
ans =
{
[1,1] = hello Ben
[2,1] = hi Karen
[3,1] = hey Lisa
}