3

我怎样才能连接:

A = {'hello'; 'hi'; 'hey'}

B = {'Ben'; 'Karen'; 'Lisa'}

中间有空格可以得到:

C = {'hello Ben'; 'hi Karen'; 'hey Lisa'}

有没有快速的非循环方式?

4

3 回答 3

3

您可以使用strcat(),尽管它执行一个循环:

strcat(A,{' '}, B)

通过将其包含在单元格中来保留空白。

或者,FEX:CStrCatStr是一个 mex 例程,可实现 10 倍加速(取决于测试环境):

CStrCatStr(A,' ', B)
于 2013-05-24T20:43:35.830 回答
2

strcat连接字符串的更快(虽然不太优雅)的替代方法是sprintftextscan命令的组合:

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.
于 2013-05-24T23:36:40.423 回答
1

您可以使用 cellfun 做到这一点:

cellfun(@(x,y) [x, ' ', y], A, B, 'UniformOutput', false)

ans = 
{
  [1,1] = hello Ben
  [2,1] = hi Karen
  [3,1] = hey Lisa
}
于 2013-05-24T20:29:28.470 回答